Changeset 1ad19d5


Ignore:
Timestamp:
Sep 25, 2006, 10:45:14 AM (16 years ago)
Author:
Jim Gifford <clfs@…>
Branches:
clfs-1.2, clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
15f7d33
Parents:
0b2e09e
Message:

Updated Linux 2.6.18 patches

Location:
patches
Files:
4 moved

Legend:

Unmodified
Added
Removed
  • patches/linux-2.6.18-mips-1.patch

    r0b2e09e r1ad19d5  
    11Submitted By: Jim Gifford (patches at jg555 dot com)
    2 Date: 2006-09-16
    3 Initial Package Version: 2.6.17.13
     2Date: 2006-09-23
     3Initial Package Version: 2.6.18
    44Origin: Linux-MIPS
    55Upstream Status: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/
    66
    7 diff -Naur linux-2.6.17.13.orig/arch/mips/cobalt/console.c linux-2.6.17.13/arch/mips/cobalt/console.c
    8 --- linux-2.6.17.13.orig/arch/mips/cobalt/console.c     2006-09-08 20:23:25.000000000 -0700
    9 +++ linux-2.6.17.13/arch/mips/cobalt/console.c  2006-09-09 10:17:04.000000000 -0700
    10 @@ -41,3 +41,8 @@
    11  
    12         printk("Cobalt: early console registered\n");
    13  }
    14 +
    15 +void __init disable_early_printk(void)
    16 +{
    17 +       unregister_console(&cons_info);
    18 +}
    19 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/atlas_defconfig linux-2.6.17.13/arch/mips/configs/atlas_defconfig
    20 --- linux-2.6.17.13.orig/arch/mips/configs/atlas_defconfig      2006-09-08 20:23:25.000000000 -0700
    21 +++ linux-2.6.17.13/arch/mips/configs/atlas_defconfig   2006-09-09 10:17:04.000000000 -0700
    22 @@ -67,6 +67,7 @@
     7diff -Naur linux-2.6.18/arch/mips/au1000/db1x00/Makefile linux-2.6.18.mips/arch/mips/au1000/db1x00/Makefile
     8--- linux-2.6.18/arch/mips/au1000/db1x00/Makefile       2006-09-19 20:42:06.000000000 -0700
     9+++ linux-2.6.18.mips/arch/mips/au1000/db1x00/Makefile  2006-09-20 06:55:21.000000000 -0700
     10@@ -6,4 +6,3 @@
     11 # Makefile for the Alchemy Semiconductor Db1x00 board.
     12 
     13 lib-y := init.o board_setup.o irqmap.o
     14-obj-$(CONFIG_WM97XX_COMODULE) += mirage_ts.o
     15diff -Naur linux-2.6.18/arch/mips/au1000/db1x00/mirage_ts.c linux-2.6.18.mips/arch/mips/au1000/db1x00/mirage_ts.c
     16--- linux-2.6.18/arch/mips/au1000/db1x00/mirage_ts.c    2006-09-19 20:42:06.000000000 -0700
     17+++ linux-2.6.18.mips/arch/mips/au1000/db1x00/mirage_ts.c       1969-12-31 16:00:00.000000000 -0800
     18@@ -1,260 +0,0 @@
     19-/*
     20- * linux/arch/mips/au1000/db1x00/mirage_ts.c
     21- *
     22- * BRIEF MODULE DESCRIPTION
     23- *     Glue between Mirage board-specific touchscreen pieces
     24- *     and generic Wolfson Codec touchscreen support.
     25- *
     26- *     Based on pb1100_ts.c used in Hydrogen II.
     27- *
     28- * Copyright (c) 2003 Embedded Edge, LLC
     29- *             dan@embeddededge.com
     30- *
     31- *  This program is free software; you can redistribute         it and/or modify it
     32- *  under  the terms of         the GNU General  Public License as published by the
     33- *  Free Software Foundation;  either version 2 of the License, or (at your
     34- *  option) any later version.
     35- *
     36- *  THIS  SOFTWARE  IS PROVIDED          ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
     37- *  WARRANTIES,          INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
     38- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
     39- *  NO EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
     40- *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     41- *  NOT LIMITED          TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
     42- *  USE, DATA, OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     43- *  ANY THEORY OF LIABILITY, WHETHER IN         CONTRACT, STRICT LIABILITY, OR TORT
     44- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     45- *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     46- *
     47- *  You should have received a copy of the  GNU General Public License along
     48- *  with this program; if not, write  to the Free Software Foundation, Inc.,
     49- *  675 Mass Ave, Cambridge, MA 02139, USA.
     50- */
     51-
     52-#include <linux/types.h>
     53-#include <linux/module.h>
     54-#include <linux/sched.h>
     55-#include <linux/kernel.h>
     56-#include <linux/init.h>
     57-#include <linux/fs.h>
     58-#include <linux/poll.h>
     59-#include <linux/proc_fs.h>
     60-#include <linux/smp.h>
     61-#include <linux/smp_lock.h>
     62-#include <linux/wait.h>
     63-
     64-#include <asm/segment.h>
     65-#include <asm/irq.h>
     66-#include <asm/uaccess.h>
     67-#include <asm/delay.h>
     68-#include <asm/au1000.h>
     69-
     70-/*
     71- *  Imported interface to Wolfson Codec driver.
     72- */
     73-extern void *wm97xx_ts_get_handle(int which);
     74-extern int wm97xx_ts_ready(void* ts_handle);
     75-extern void wm97xx_ts_set_cal(void* ts_handle, int xscale, int xtrans, int yscale, int ytrans);
     76-extern u16 wm97xx_ts_get_ac97(void* ts_handle, u8 reg);
     77-extern void wm97xx_ts_set_ac97(void* ts_handle, u8 reg, u16 val);
     78-extern int wm97xx_ts_read_data(void* ts_handle, long* x, long* y, long* pressure);
     79-extern void wm97xx_ts_send_data(void* ts_handle, long x, long y, long z);
     80-
     81-int wm97xx_comodule_present = 1;
     82-
     83-
     84-#define TS_NAME "mirage_ts"
     85-
     86-#define err(format, arg...) printk(KERN_ERR TS_NAME ": " format "\n" , ## arg)
     87-#define info(format, arg...) printk(KERN_INFO TS_NAME ": " format "\n" , ## arg)
     88-#define warn(format, arg...) printk(KERN_WARNING TS_NAME ": " format "\n" , ## arg)
     89-#define DPRINTK(format, arg...) printk("%s: " format "\n", __FUNCTION__ , ## arg)
     90-
     91-
     92-#define PEN_DOWN_IRQ   AU1000_GPIO_7
     93-
     94-static struct task_struct *ts_task = 0;
     95-static DECLARE_COMPLETION(ts_complete);
     96-static DECLARE_WAIT_QUEUE_HEAD(pendown_wait);
     97-
     98-#ifdef CONFIG_WM97XX_FIVEWIRETS
     99-static int release_pressure = 1;
     100-#else
     101-static int release_pressure = 50;
     102-#endif
     103-
     104-typedef struct {
     105-   long x;
     106-   long y;
     107-} DOWN_EVENT;
     108-
     109-#define SAMPLE_RATE    50      /* samples per second */
     110-#define PEN_DEBOUNCE   5       /* samples for settling - fn of SAMPLE_RATE */
     111-#define PEN_UP_TIMEOUT 10      /* in seconds */
     112-#define PEN_UP_SETTLE  5       /* samples per second */
     113-
     114-static struct {
     115-       int xscale;
     116-       int xtrans;
     117-       int yscale;
     118-       int ytrans;
     119-} mirage_ts_cal =
     120-{
     121-#if 0
     122-       .xscale   = 84,
     123-       .xtrans = -157,
     124-       .yscale   = 66,
     125-       .ytrans = -150,
     126-#else
     127-       .xscale   = 84,
     128-       .xtrans = -150,
     129-       .yscale   = 66,
     130-       .ytrans = -146,
     131-#endif
     132-};
     133-
     134-
     135-static void pendown_irq(int irqnr, void *devid, struct pt_regs *regs)
     136-{
     137-//DPRINTK("got one 0x%x", au_readl(SYS_PINSTATERD));
     138-       wake_up(&pendown_wait);
     139-}
     140-
     141-static int ts_thread(void *id)
     142-{
     143-       static int pen_was_down = 0;
     144-       static DOWN_EVENT pen_xy;
     145-       long x, y, z;
     146-       void *ts;       /* handle */
     147-       struct task_struct *tsk = current;
     148-       int timeout = HZ / SAMPLE_RATE;
     149-
     150-       ts_task = tsk;
     151-
     152-       daemonize();
     153-       tsk->tty = NULL;
     154-       tsk->policy = SCHED_FIFO;
     155-       tsk->rt_priority = 1;
     156-       strcpy(tsk->comm, "touchscreen");
     157-
     158-       /* only want to receive SIGKILL */
     159-       spin_lock_irq(&tsk->sigmask_lock);
     160-       siginitsetinv(&tsk->blocked, sigmask(SIGKILL));
     161-       recalc_sigpending(tsk);
     162-       spin_unlock_irq(&tsk->sigmask_lock);
     163-
     164-       /* get handle for codec */
     165-       ts = wm97xx_ts_get_handle(0);
     166-
     167-       /* proceed only after everybody is ready */
     168-       wait_event_timeout(pendown_wait, wm97xx_ts_ready(ts), HZ/4);
     169-
     170-       /* board-specific calibration */
     171-       wm97xx_ts_set_cal(ts,
     172-                       mirage_ts_cal.xscale,
     173-                       mirage_ts_cal.xtrans,
     174-                       mirage_ts_cal.yscale,
     175-                       mirage_ts_cal.ytrans);
     176-
     177-       /* route Wolfson pendown interrupts to our GPIO */
     178-       au_sync();
     179-       wm97xx_ts_set_ac97(ts, 0x4c, wm97xx_ts_get_ac97(ts, 0x4c) & ~0x0008);
     180-       au_sync();
     181-       wm97xx_ts_set_ac97(ts, 0x56, wm97xx_ts_get_ac97(ts, 0x56) & ~0x0008);
     182-       au_sync();
     183-       wm97xx_ts_set_ac97(ts, 0x52, wm97xx_ts_get_ac97(ts, 0x52) | 0x2008);
     184-       au_sync();
     185-
     186-       for (;;) {
     187-               interruptible_sleep_on_timeout(&pendown_wait, timeout);
     188-               disable_irq(PEN_DOWN_IRQ);
     189-               if (signal_pending(tsk)) {
     190-                       break;
     191-               }
     192-
     193-               /* read codec */
     194-               if (!wm97xx_ts_read_data(ts, &x, &y, &z))
     195-                       z = 0;  /* treat no-data and pen-up the same */
     196-
     197-               if (signal_pending(tsk)) {
     198-                       break;
     199-               }
     200-
     201-               if (z >= release_pressure) {
     202-                       y = ~y; /* top to bottom */
     203-                       if (pen_was_down > 1 /*&& pen_was_down < PEN_DEBOUNCE*/) {//THXXX
     204-                               /* bounce ? */
     205-                               x = pen_xy.x;
     206-                               y = pen_xy.y;
     207-                               --pen_was_down;
     208-                       } else if (pen_was_down <= 1) {
     209-                               pen_xy.x = x;
     210-                               pen_xy.y = y;
     211-                               if (pen_was_down)
     212-                                       wm97xx_ts_send_data(ts, x, y, z);
     213-                               pen_was_down = PEN_DEBOUNCE;
     214-                       }
     215-                       //wm97xx_ts_send_data(ts, x, y, z);
     216-                       timeout = HZ / SAMPLE_RATE;
     217-               } else {
     218-                       if (pen_was_down) {
     219-                               if (--pen_was_down)
     220-                                       z = release_pressure;
     221-                               else //THXXX
     222-                               wm97xx_ts_send_data(ts, pen_xy.x, pen_xy.y, z);
     223-                       }
     224-                       /* The pendown signal takes some time to settle after
     225-                        * reading the pen pressure so wait a little
     226-                        * before enabling the pen.
     227-                        */
     228-                       if (! pen_was_down) {
     229-//                             interruptible_sleep_on_timeout(&pendown_wait, HZ / PEN_UP_SETTLE);
     230-                               timeout = HZ * PEN_UP_TIMEOUT;
     231-                       }
     232-               }
     233-               enable_irq(PEN_DOWN_IRQ);
     234-       }
     235-       enable_irq(PEN_DOWN_IRQ);
     236-       ts_task = NULL;
     237-       complete(&ts_complete);
     238-       return 0;
     239-}
     240-
     241-static int __init ts_mirage_init(void)
     242-{
     243-       int ret;
     244-
     245-       /* pen down signal is connected to GPIO 7 */
     246-
     247-       ret = request_irq(PEN_DOWN_IRQ, pendown_irq, 0, "ts-pendown", NULL);
     248-       if (ret) {
     249-               err("unable to get pendown irq%d: [%d]", PEN_DOWN_IRQ, ret);
     250-               return ret;
     251-       }
     252-
     253-       lock_kernel();
     254-       ret = kernel_thread(ts_thread, NULL, CLONE_FS | CLONE_FILES);
     255-       if (ret < 0) {
     256-               unlock_kernel();
     257-               return ret;
     258-       }
     259-       unlock_kernel();
     260-
     261-       info("Mirage touchscreen IRQ initialized.");
     262-
     263-       return 0;
     264-}
     265-
     266-static void __exit ts_mirage_exit(void)
     267-{
     268-       if (ts_task) {
     269-               send_sig(SIGKILL, ts_task, 1);
     270-               wait_for_completion(&ts_complete);
     271-       }
     272-
     273-       free_irq(PEN_DOWN_IRQ, NULL);
     274-}
     275-
     276-module_init(ts_mirage_init);
     277-module_exit(ts_mirage_exit);
     278-
     279diff -Naur linux-2.6.18/arch/mips/configs/e55_defconfig linux-2.6.18.mips/arch/mips/configs/e55_defconfig
     280--- linux-2.6.18/arch/mips/configs/e55_defconfig        2006-09-19 20:42:06.000000000 -0700
     281+++ linux-2.6.18.mips/arch/mips/configs/e55_defconfig   2006-09-20 06:55:21.000000000 -0700
     282@@ -1,7 +1,7 @@
     283 #
     284 # Automatically generated make config: don't edit
     285-# Linux kernel version: 2.6.18-rc1
     286-# Thu Jul  6 10:04:02 2006
     287+# Linux kernel version: 2.6.18-rc2
     288+# Tue Jul 25 23:15:03 2006
     289 #
     290 CONFIG_MIPS=y
     291 
     292@@ -227,7 +227,6 @@
     293 #
     294 # PCCARD (PCMCIA/CardBus) support
     295 #
     296-# CONFIG_PCCARD is not set
     297 
     298 #
     299 # PCI Hotplug Support
     300@@ -254,7 +253,6 @@
     301 #
     302 CONFIG_STANDALONE=y
     303 CONFIG_PREVENT_FIRMWARE_BUILD=y
     304-# CONFIG_FW_LOADER is not set
     305 # CONFIG_SYS_HYPERVISOR is not set
     306 
     307 #
     308@@ -284,6 +282,7 @@
     309 CONFIG_BLK_DEV_RAM=m
     310 CONFIG_BLK_DEV_RAM_COUNT=16
     311 CONFIG_BLK_DEV_RAM_SIZE=4096
     312+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
     313 # CONFIG_BLK_DEV_INITRD is not set
     314 # CONFIG_CDROM_PKTCDVD is not set
     315 
     316@@ -643,6 +642,7 @@
     317 #
     318 # Kernel hacking
     319 #
     320+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
     321 # CONFIG_PRINTK_TIME is not set
     322 # CONFIG_MAGIC_SYSRQ is not set
     323 # CONFIG_UNUSED_SYMBOLS is not set
     324@@ -650,7 +650,7 @@
     325 CONFIG_LOG_BUF_SHIFT=14
     326 # CONFIG_DEBUG_FS is not set
     327 CONFIG_CROSSCOMPILE=y
     328-CONFIG_CMDLINE="console=ttyVR0,19200 mem=8M"
     329+CONFIG_CMDLINE="console=ttyVR0,19200 ide0=0x1f0,0x3f6,40 mem=8M"
     330 
     331 #
     332 # Security options
     333diff -Naur linux-2.6.18/arch/mips/configs/mpc30x_defconfig linux-2.6.18.mips/arch/mips/configs/mpc30x_defconfig
     334--- linux-2.6.18/arch/mips/configs/mpc30x_defconfig     2006-09-19 20:42:06.000000000 -0700
     335+++ linux-2.6.18.mips/arch/mips/configs/mpc30x_defconfig        2006-09-20 06:55:21.000000000 -0700
     336@@ -1,7 +1,7 @@
     337 #
     338 # Automatically generated make config: don't edit
     339-# Linux kernel version: 2.6.18-rc1
     340-# Thu Jul  6 10:04:15 2006
     341+# Linux kernel version: 2.6.18-rc2
     342+# Tue Jul 25 23:16:46 2006
     343 #
     344 CONFIG_MIPS=y
     345 
     346@@ -71,7 +71,6 @@
     347 CONFIG_VICTOR_MPC30X=y
     348 # CONFIG_ZAO_CAPCELLA is not set
     349 CONFIG_PCI_VR41XX=y
     350-CONFIG_VRC4173=y
     351 CONFIG_RWSEM_GENERIC_SPINLOCK=y
    23352 CONFIG_GENERIC_FIND_NEXT_BIT=y
    24353 CONFIG_GENERIC_HWEIGHT=y
    25  CONFIG_GENERIC_CALIBRATE_DELAY=y
    26 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    27  CONFIG_DMA_NONCOHERENT=y
    28  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    29  CONFIG_MIPS_BONITO64=y
    30 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/bigsur_defconfig linux-2.6.17.13/arch/mips/configs/bigsur_defconfig
    31 --- linux-2.6.17.13.orig/arch/mips/configs/bigsur_defconfig     2006-09-08 20:23:25.000000000 -0700
    32 +++ linux-2.6.17.13/arch/mips/configs/bigsur_defconfig  2006-09-09 10:17:04.000000000 -0700
    33 @@ -83,6 +83,7 @@
    34  CONFIG_GENERIC_FIND_NEXT_BIT=y
    35  CONFIG_GENERIC_HWEIGHT=y
    36  CONFIG_GENERIC_CALIBRATE_DELAY=y
    37 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    38  CONFIG_DMA_COHERENT=y
    39  CONFIG_CPU_BIG_ENDIAN=y
    40  # CONFIG_CPU_LITTLE_ENDIAN is not set
    41 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/capcella_defconfig linux-2.6.17.13/arch/mips/configs/capcella_defconfig
    42 --- linux-2.6.17.13.orig/arch/mips/configs/capcella_defconfig   2006-09-08 20:23:25.000000000 -0700
    43 +++ linux-2.6.17.13/arch/mips/configs/capcella_defconfig        2006-09-09 10:17:04.000000000 -0700
    44 @@ -75,6 +75,7 @@
    45  CONFIG_GENERIC_FIND_NEXT_BIT=y
    46  CONFIG_GENERIC_HWEIGHT=y
    47  CONFIG_GENERIC_CALIBRATE_DELAY=y
    48 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    49  CONFIG_DMA_NONCOHERENT=y
    50  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    51  # CONFIG_CPU_BIG_ENDIAN is not set
    52 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/cobalt_defconfig linux-2.6.17.13/arch/mips/configs/cobalt_defconfig
    53 --- linux-2.6.17.13.orig/arch/mips/configs/cobalt_defconfig     2006-09-08 20:23:25.000000000 -0700
    54 +++ linux-2.6.17.13/arch/mips/configs/cobalt_defconfig  2006-09-09 10:17:04.000000000 -0700
    55 @@ -68,6 +68,7 @@
    56  CONFIG_GENERIC_FIND_NEXT_BIT=y
    57  CONFIG_GENERIC_HWEIGHT=y
    58  CONFIG_GENERIC_CALIBRATE_DELAY=y
    59 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    60  CONFIG_DMA_NONCOHERENT=y
    61  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    62  CONFIG_I8259=y
    63 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/db1000_defconfig linux-2.6.17.13/arch/mips/configs/db1000_defconfig
    64 --- linux-2.6.17.13.orig/arch/mips/configs/db1000_defconfig     2006-09-08 20:23:25.000000000 -0700
    65 +++ linux-2.6.17.13/arch/mips/configs/db1000_defconfig  2006-09-09 10:17:04.000000000 -0700
    66 @@ -67,6 +67,7 @@
    67  CONFIG_GENERIC_FIND_NEXT_BIT=y
    68  CONFIG_GENERIC_HWEIGHT=y
    69  CONFIG_GENERIC_CALIBRATE_DELAY=y
    70 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    71  CONFIG_DMA_NONCOHERENT=y
    72  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    73  # CONFIG_CPU_BIG_ENDIAN is not set
    74 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/db1100_defconfig linux-2.6.17.13/arch/mips/configs/db1100_defconfig
    75 --- linux-2.6.17.13.orig/arch/mips/configs/db1100_defconfig     2006-09-08 20:23:25.000000000 -0700
    76 +++ linux-2.6.17.13/arch/mips/configs/db1100_defconfig  2006-09-09 10:17:04.000000000 -0700
    77 @@ -67,6 +67,7 @@
    78  CONFIG_GENERIC_FIND_NEXT_BIT=y
    79  CONFIG_GENERIC_HWEIGHT=y
    80  CONFIG_GENERIC_CALIBRATE_DELAY=y
    81 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    82  CONFIG_DMA_NONCOHERENT=y
    83  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    84  # CONFIG_CPU_BIG_ENDIAN is not set
    85 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/db1200_defconfig linux-2.6.17.13/arch/mips/configs/db1200_defconfig
    86 --- linux-2.6.17.13.orig/arch/mips/configs/db1200_defconfig     2006-09-08 20:23:25.000000000 -0700
    87 +++ linux-2.6.17.13/arch/mips/configs/db1200_defconfig  2006-09-09 10:17:04.000000000 -0700
    88 @@ -67,6 +67,7 @@
    89  CONFIG_GENERIC_FIND_NEXT_BIT=y
    90  CONFIG_GENERIC_HWEIGHT=y
    91  CONFIG_GENERIC_CALIBRATE_DELAY=y
    92 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    93  CONFIG_DMA_COHERENT=y
    94  CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
    95  # CONFIG_CPU_BIG_ENDIAN is not set
    96 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/db1500_defconfig linux-2.6.17.13/arch/mips/configs/db1500_defconfig
    97 --- linux-2.6.17.13.orig/arch/mips/configs/db1500_defconfig     2006-09-08 20:23:25.000000000 -0700
    98 +++ linux-2.6.17.13/arch/mips/configs/db1500_defconfig  2006-09-09 10:17:04.000000000 -0700
    99 @@ -67,6 +67,7 @@
    100  CONFIG_GENERIC_FIND_NEXT_BIT=y
    101  CONFIG_GENERIC_HWEIGHT=y
    102  CONFIG_GENERIC_CALIBRATE_DELAY=y
    103 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    104  CONFIG_DMA_NONCOHERENT=y
    105  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    106  CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
    107 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/db1550_defconfig linux-2.6.17.13/arch/mips/configs/db1550_defconfig
    108 --- linux-2.6.17.13.orig/arch/mips/configs/db1550_defconfig     2006-09-08 20:23:25.000000000 -0700
    109 +++ linux-2.6.17.13/arch/mips/configs/db1550_defconfig  2006-09-09 10:17:04.000000000 -0700
    110 @@ -67,6 +67,7 @@
    111  CONFIG_GENERIC_FIND_NEXT_BIT=y
    112  CONFIG_GENERIC_HWEIGHT=y
    113  CONFIG_GENERIC_CALIBRATE_DELAY=y
    114 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    115  CONFIG_DMA_NONCOHERENT=y
    116  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    117  CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
    118 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ddb5476_defconfig linux-2.6.17.13/arch/mips/configs/ddb5476_defconfig
    119 --- linux-2.6.17.13.orig/arch/mips/configs/ddb5476_defconfig    2006-09-08 20:23:25.000000000 -0700
    120 +++ linux-2.6.17.13/arch/mips/configs/ddb5476_defconfig 2006-09-09 10:17:04.000000000 -0700
    121 @@ -67,6 +67,7 @@
    122  CONFIG_GENERIC_FIND_NEXT_BIT=y
    123  CONFIG_GENERIC_HWEIGHT=y
    124  CONFIG_GENERIC_CALIBRATE_DELAY=y
    125 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    126  CONFIG_DMA_NONCOHERENT=y
    127  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    128  CONFIG_I8259=y
    129 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ddb5477_defconfig linux-2.6.17.13/arch/mips/configs/ddb5477_defconfig
    130 --- linux-2.6.17.13.orig/arch/mips/configs/ddb5477_defconfig    2006-09-08 20:23:25.000000000 -0700
    131 +++ linux-2.6.17.13/arch/mips/configs/ddb5477_defconfig 2006-09-09 10:17:04.000000000 -0700
    132 @@ -68,6 +68,7 @@
    133  CONFIG_GENERIC_FIND_NEXT_BIT=y
    134  CONFIG_GENERIC_HWEIGHT=y
    135  CONFIG_GENERIC_CALIBRATE_DELAY=y
    136 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    137  CONFIG_DMA_NONCOHERENT=y
    138  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    139  CONFIG_I8259=y
    140 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/decstation_defconfig linux-2.6.17.13/arch/mips/configs/decstation_defconfig
    141 --- linux-2.6.17.13.orig/arch/mips/configs/decstation_defconfig 2006-09-08 20:23:25.000000000 -0700
    142 +++ linux-2.6.17.13/arch/mips/configs/decstation_defconfig      2006-09-09 10:17:04.000000000 -0700
    143 @@ -68,6 +68,7 @@
    144  CONFIG_GENERIC_FIND_NEXT_BIT=y
    145  CONFIG_GENERIC_HWEIGHT=y
    146  CONFIG_GENERIC_CALIBRATE_DELAY=y
    147 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    148  CONFIG_DMA_NONCOHERENT=y
    149  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    150  # CONFIG_CPU_BIG_ENDIAN is not set
    151 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/e55_defconfig linux-2.6.17.13/arch/mips/configs/e55_defconfig
    152 --- linux-2.6.17.13.orig/arch/mips/configs/e55_defconfig        2006-09-08 20:23:25.000000000 -0700
    153 +++ linux-2.6.17.13/arch/mips/configs/e55_defconfig     2006-09-09 10:17:04.000000000 -0700
    154 @@ -73,6 +73,7 @@
    155  CONFIG_GENERIC_FIND_NEXT_BIT=y
    156  CONFIG_GENERIC_HWEIGHT=y
    157  CONFIG_GENERIC_CALIBRATE_DELAY=y
    158 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    159  CONFIG_DMA_NONCOHERENT=y
    160  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    161  # CONFIG_CPU_BIG_ENDIAN is not set
    162 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ev64120_defconfig linux-2.6.17.13/arch/mips/configs/ev64120_defconfig
    163 --- linux-2.6.17.13.orig/arch/mips/configs/ev64120_defconfig    2006-09-08 20:23:25.000000000 -0700
    164 +++ linux-2.6.17.13/arch/mips/configs/ev64120_defconfig 2006-09-09 10:17:04.000000000 -0700
    165 @@ -68,6 +68,7 @@
    166  CONFIG_GENERIC_FIND_NEXT_BIT=y
    167  CONFIG_GENERIC_HWEIGHT=y
    168  CONFIG_GENERIC_CALIBRATE_DELAY=y
    169 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    170  CONFIG_DMA_NONCOHERENT=y
    171  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    172  CONFIG_CPU_BIG_ENDIAN=y
    173 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ev96100_defconfig linux-2.6.17.13/arch/mips/configs/ev96100_defconfig
    174 --- linux-2.6.17.13.orig/arch/mips/configs/ev96100_defconfig    2006-09-08 20:23:25.000000000 -0700
    175 +++ linux-2.6.17.13/arch/mips/configs/ev96100_defconfig 2006-09-09 10:17:04.000000000 -0700
    176 @@ -67,6 +67,7 @@
    177  CONFIG_GENERIC_FIND_NEXT_BIT=y
    178  CONFIG_GENERIC_HWEIGHT=y
    179  CONFIG_GENERIC_CALIBRATE_DELAY=y
    180 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    181  CONFIG_DMA_NONCOHERENT=y
    182  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    183  CONFIG_CPU_BIG_ENDIAN=y
    184 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ip22_defconfig linux-2.6.17.13/arch/mips/configs/ip22_defconfig
    185 --- linux-2.6.17.13.orig/arch/mips/configs/ip22_defconfig       2006-09-08 20:23:25.000000000 -0700
    186 +++ linux-2.6.17.13/arch/mips/configs/ip22_defconfig    2006-09-09 10:17:04.000000000 -0700
    187 @@ -67,6 +67,7 @@
    188  CONFIG_GENERIC_FIND_NEXT_BIT=y
    189  CONFIG_GENERIC_HWEIGHT=y
    190  CONFIG_GENERIC_CALIBRATE_DELAY=y
    191 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    192  CONFIG_ARC=y
    193  CONFIG_DMA_NONCOHERENT=y
    194  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    195 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ip27_defconfig linux-2.6.17.13/arch/mips/configs/ip27_defconfig
    196 --- linux-2.6.17.13.orig/arch/mips/configs/ip27_defconfig       2006-09-08 20:23:25.000000000 -0700
    197 +++ linux-2.6.17.13/arch/mips/configs/ip27_defconfig    2006-09-09 10:17:04.000000000 -0700
    198 @@ -73,6 +73,7 @@
    199  CONFIG_GENERIC_FIND_NEXT_BIT=y
    200  CONFIG_GENERIC_HWEIGHT=y
    201  CONFIG_GENERIC_CALIBRATE_DELAY=y
    202 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    203  CONFIG_ARC=y
    204  CONFIG_DMA_IP27=y
    205  CONFIG_CPU_BIG_ENDIAN=y
    206 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ip32_defconfig linux-2.6.17.13/arch/mips/configs/ip32_defconfig
    207 --- linux-2.6.17.13.orig/arch/mips/configs/ip32_defconfig       2006-09-08 20:23:25.000000000 -0700
    208 +++ linux-2.6.17.13/arch/mips/configs/ip32_defconfig    2006-09-09 10:17:04.000000000 -0700
    209 @@ -67,6 +67,7 @@
    210  CONFIG_GENERIC_FIND_NEXT_BIT=y
    211  CONFIG_GENERIC_HWEIGHT=y
    212  CONFIG_GENERIC_CALIBRATE_DELAY=y
    213 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    214  CONFIG_ARC=y
    215  CONFIG_DMA_IP32=y
    216  CONFIG_DMA_NONCOHERENT=y
    217 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/it8172_defconfig linux-2.6.17.13/arch/mips/configs/it8172_defconfig
    218 --- linux-2.6.17.13.orig/arch/mips/configs/it8172_defconfig     2006-09-08 20:23:25.000000000 -0700
    219 +++ linux-2.6.17.13/arch/mips/configs/it8172_defconfig  2006-09-09 10:17:04.000000000 -0700
    220 @@ -68,6 +68,7 @@
    221  CONFIG_GENERIC_FIND_NEXT_BIT=y
    222  CONFIG_GENERIC_HWEIGHT=y
    223  CONFIG_GENERIC_CALIBRATE_DELAY=y
    224 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    225  CONFIG_DMA_NONCOHERENT=y
    226  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    227  # CONFIG_CPU_BIG_ENDIAN is not set
    228 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ivr_defconfig linux-2.6.17.13/arch/mips/configs/ivr_defconfig
    229 --- linux-2.6.17.13.orig/arch/mips/configs/ivr_defconfig        2006-09-08 20:23:25.000000000 -0700
    230 +++ linux-2.6.17.13/arch/mips/configs/ivr_defconfig     2006-09-09 10:17:04.000000000 -0700
    231 @@ -67,6 +67,7 @@
    232  CONFIG_GENERIC_FIND_NEXT_BIT=y
    233  CONFIG_GENERIC_HWEIGHT=y
    234  CONFIG_GENERIC_CALIBRATE_DELAY=y
    235 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    236  CONFIG_DMA_NONCOHERENT=y
    237  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    238  # CONFIG_CPU_BIG_ENDIAN is not set
    239 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/jaguar-atx_defconfig linux-2.6.17.13/arch/mips/configs/jaguar-atx_defconfig
    240 --- linux-2.6.17.13.orig/arch/mips/configs/jaguar-atx_defconfig 2006-09-08 20:23:25.000000000 -0700
    241 +++ linux-2.6.17.13/arch/mips/configs/jaguar-atx_defconfig      2006-09-09 10:17:04.000000000 -0700
    242 @@ -68,6 +68,7 @@
    243  CONFIG_GENERIC_FIND_NEXT_BIT=y
    244  CONFIG_GENERIC_HWEIGHT=y
    245  CONFIG_GENERIC_CALIBRATE_DELAY=y
    246 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    247  CONFIG_DMA_NONCOHERENT=y
    248  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    249  CONFIG_LIMITED_DMA=y
    250 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/jmr3927_defconfig linux-2.6.17.13/arch/mips/configs/jmr3927_defconfig
    251 --- linux-2.6.17.13.orig/arch/mips/configs/jmr3927_defconfig    2006-09-08 20:23:25.000000000 -0700
    252 +++ linux-2.6.17.13/arch/mips/configs/jmr3927_defconfig 2006-09-09 10:17:04.000000000 -0700
    253 @@ -67,6 +67,7 @@
    254  CONFIG_GENERIC_FIND_NEXT_BIT=y
    255  CONFIG_GENERIC_HWEIGHT=y
    256  CONFIG_GENERIC_CALIBRATE_DELAY=y
    257 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    258  CONFIG_DMA_NONCOHERENT=y
    259  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    260  CONFIG_CPU_BIG_ENDIAN=y
    261 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/lasat200_defconfig linux-2.6.17.13/arch/mips/configs/lasat200_defconfig
    262 --- linux-2.6.17.13.orig/arch/mips/configs/lasat200_defconfig   2006-09-08 20:23:25.000000000 -0700
    263 +++ linux-2.6.17.13/arch/mips/configs/lasat200_defconfig        2006-09-09 10:17:04.000000000 -0700
    264 @@ -71,6 +71,7 @@
    265  CONFIG_GENERIC_FIND_NEXT_BIT=y
    266  CONFIG_GENERIC_HWEIGHT=y
    267  CONFIG_GENERIC_CALIBRATE_DELAY=y
    268 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    269  CONFIG_DMA_NONCOHERENT=y
    270  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    271  CONFIG_MIPS_NILE4=y
    272 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/malta_defconfig linux-2.6.17.13/arch/mips/configs/malta_defconfig
    273 --- linux-2.6.17.13.orig/arch/mips/configs/malta_defconfig      2006-09-08 20:23:25.000000000 -0700
    274 +++ linux-2.6.17.13/arch/mips/configs/malta_defconfig   2006-09-09 10:17:04.000000000 -0700
    275 @@ -67,6 +67,7 @@
    276  CONFIG_GENERIC_FIND_NEXT_BIT=y
    277  CONFIG_GENERIC_HWEIGHT=y
    278  CONFIG_GENERIC_CALIBRATE_DELAY=y
    279 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    280  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    281  CONFIG_DMA_NONCOHERENT=y
    282  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    283 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/mipssim_defconfig linux-2.6.17.13/arch/mips/configs/mipssim_defconfig
    284 --- linux-2.6.17.13.orig/arch/mips/configs/mipssim_defconfig    2006-09-08 20:23:25.000000000 -0700
    285 +++ linux-2.6.17.13/arch/mips/configs/mipssim_defconfig 2006-09-09 10:17:04.000000000 -0700
    286 @@ -67,6 +67,7 @@
    287  CONFIG_GENERIC_FIND_NEXT_BIT=y
    288  CONFIG_GENERIC_HWEIGHT=y
    289  CONFIG_GENERIC_CALIBRATE_DELAY=y
    290 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    291  CONFIG_DMA_NONCOHERENT=y
    292  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    293  # CONFIG_CPU_BIG_ENDIAN is not set
    294 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/mpc30x_defconfig linux-2.6.17.13/arch/mips/configs/mpc30x_defconfig
    295 --- linux-2.6.17.13.orig/arch/mips/configs/mpc30x_defconfig     2006-09-08 20:23:25.000000000 -0700
    296 +++ linux-2.6.17.13/arch/mips/configs/mpc30x_defconfig  2006-09-09 10:17:04.000000000 -0700
    297 @@ -75,6 +75,7 @@
    298  CONFIG_GENERIC_FIND_NEXT_BIT=y
    299  CONFIG_GENERIC_HWEIGHT=y
    300  CONFIG_GENERIC_CALIBRATE_DELAY=y
    301 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    302  CONFIG_DMA_NONCOHERENT=y
    303  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    304  # CONFIG_CPU_BIG_ENDIAN is not set
    305 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ocelot_3_defconfig linux-2.6.17.13/arch/mips/configs/ocelot_3_defconfig
    306 --- linux-2.6.17.13.orig/arch/mips/configs/ocelot_3_defconfig   2006-09-08 20:23:25.000000000 -0700
    307 +++ linux-2.6.17.13/arch/mips/configs/ocelot_3_defconfig        2006-09-09 10:17:04.000000000 -0700
    308 @@ -67,6 +67,7 @@
    309  CONFIG_GENERIC_FIND_NEXT_BIT=y
    310  CONFIG_GENERIC_HWEIGHT=y
    311  CONFIG_GENERIC_CALIBRATE_DELAY=y
    312 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    313  CONFIG_DMA_NONCOHERENT=y
    314  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    315  CONFIG_CPU_BIG_ENDIAN=y
    316 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ocelot_c_defconfig linux-2.6.17.13/arch/mips/configs/ocelot_c_defconfig
    317 --- linux-2.6.17.13.orig/arch/mips/configs/ocelot_c_defconfig   2006-09-08 20:23:25.000000000 -0700
    318 +++ linux-2.6.17.13/arch/mips/configs/ocelot_c_defconfig        2006-09-09 10:17:04.000000000 -0700
    319 @@ -67,6 +67,7 @@
    320  CONFIG_GENERIC_FIND_NEXT_BIT=y
    321  CONFIG_GENERIC_HWEIGHT=y
    322  CONFIG_GENERIC_CALIBRATE_DELAY=y
    323 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    324  CONFIG_DMA_NONCOHERENT=y
    325  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    326  CONFIG_CPU_BIG_ENDIAN=y
    327 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ocelot_defconfig linux-2.6.17.13/arch/mips/configs/ocelot_defconfig
    328 --- linux-2.6.17.13.orig/arch/mips/configs/ocelot_defconfig     2006-09-08 20:23:25.000000000 -0700
    329 +++ linux-2.6.17.13/arch/mips/configs/ocelot_defconfig  2006-09-09 10:17:04.000000000 -0700
    330 @@ -67,6 +67,7 @@
    331  CONFIG_GENERIC_FIND_NEXT_BIT=y
    332  CONFIG_GENERIC_HWEIGHT=y
    333  CONFIG_GENERIC_CALIBRATE_DELAY=y
    334 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    335  CONFIG_DMA_NONCOHERENT=y
    336  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    337  CONFIG_CPU_BIG_ENDIAN=y
    338 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/ocelot_g_defconfig linux-2.6.17.13/arch/mips/configs/ocelot_g_defconfig
    339 --- linux-2.6.17.13.orig/arch/mips/configs/ocelot_g_defconfig   2006-09-08 20:23:25.000000000 -0700
    340 +++ linux-2.6.17.13/arch/mips/configs/ocelot_g_defconfig        2006-09-09 10:17:04.000000000 -0700
    341 @@ -67,6 +67,7 @@
    342  CONFIG_GENERIC_FIND_NEXT_BIT=y
    343  CONFIG_GENERIC_HWEIGHT=y
    344  CONFIG_GENERIC_CALIBRATE_DELAY=y
    345 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    346  CONFIG_DMA_NONCOHERENT=y
    347  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    348  CONFIG_CPU_BIG_ENDIAN=y
    349 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/pb1100_defconfig linux-2.6.17.13/arch/mips/configs/pb1100_defconfig
    350 --- linux-2.6.17.13.orig/arch/mips/configs/pb1100_defconfig     2006-09-08 20:23:25.000000000 -0700
    351 +++ linux-2.6.17.13/arch/mips/configs/pb1100_defconfig  2006-09-09 10:17:04.000000000 -0700
    352 @@ -67,6 +67,7 @@
    353  CONFIG_GENERIC_FIND_NEXT_BIT=y
    354  CONFIG_GENERIC_HWEIGHT=y
    355  CONFIG_GENERIC_CALIBRATE_DELAY=y
    356 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    357  CONFIG_DMA_NONCOHERENT=y
    358  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    359  # CONFIG_CPU_BIG_ENDIAN is not set
    360 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/pb1500_defconfig linux-2.6.17.13/arch/mips/configs/pb1500_defconfig
    361 --- linux-2.6.17.13.orig/arch/mips/configs/pb1500_defconfig     2006-09-08 20:23:25.000000000 -0700
    362 +++ linux-2.6.17.13/arch/mips/configs/pb1500_defconfig  2006-09-09 10:17:04.000000000 -0700
    363 @@ -67,6 +67,7 @@
    364  CONFIG_GENERIC_FIND_NEXT_BIT=y
    365  CONFIG_GENERIC_HWEIGHT=y
    366  CONFIG_GENERIC_CALIBRATE_DELAY=y
    367 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    368  CONFIG_DMA_NONCOHERENT=y
    369  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    370  # CONFIG_CPU_BIG_ENDIAN is not set
    371 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/pb1550_defconfig linux-2.6.17.13/arch/mips/configs/pb1550_defconfig
    372 --- linux-2.6.17.13.orig/arch/mips/configs/pb1550_defconfig     2006-09-08 20:23:25.000000000 -0700
    373 +++ linux-2.6.17.13/arch/mips/configs/pb1550_defconfig  2006-09-09 10:17:04.000000000 -0700
    374 @@ -67,6 +67,7 @@
    375  CONFIG_GENERIC_FIND_NEXT_BIT=y
    376  CONFIG_GENERIC_HWEIGHT=y
    377  CONFIG_GENERIC_CALIBRATE_DELAY=y
    378 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    379  CONFIG_DMA_NONCOHERENT=y
    380  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    381  CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
    382 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/pnx8550-jbs_defconfig linux-2.6.17.13/arch/mips/configs/pnx8550-jbs_defconfig
    383 --- linux-2.6.17.13.orig/arch/mips/configs/pnx8550-jbs_defconfig        2006-09-08 20:23:25.000000000 -0700
    384 +++ linux-2.6.17.13/arch/mips/configs/pnx8550-jbs_defconfig     2006-09-09 10:17:04.000000000 -0700
    385 @@ -67,6 +67,7 @@
    386  CONFIG_GENERIC_FIND_NEXT_BIT=y
    387  CONFIG_GENERIC_HWEIGHT=y
    388  CONFIG_GENERIC_CALIBRATE_DELAY=y
    389 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    390  CONFIG_DMA_NONCOHERENT=y
    391  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    392  # CONFIG_CPU_BIG_ENDIAN is not set
    393 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/pnx8550-v2pci_defconfig linux-2.6.17.13/arch/mips/configs/pnx8550-v2pci_defconfig
    394 --- linux-2.6.17.13.orig/arch/mips/configs/pnx8550-v2pci_defconfig      2006-09-08 20:23:25.000000000 -0700
    395 +++ linux-2.6.17.13/arch/mips/configs/pnx8550-v2pci_defconfig   2006-09-09 10:17:04.000000000 -0700
    396 @@ -67,6 +67,7 @@
    397  CONFIG_GENERIC_FIND_NEXT_BIT=y
    398  CONFIG_GENERIC_HWEIGHT=y
    399  CONFIG_GENERIC_CALIBRATE_DELAY=y
    400 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    401  CONFIG_DMA_NONCOHERENT=y
    402  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    403  # CONFIG_CPU_BIG_ENDIAN is not set
    404 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/qemu_defconfig linux-2.6.17.13/arch/mips/configs/qemu_defconfig
    405 --- linux-2.6.17.13.orig/arch/mips/configs/qemu_defconfig       2006-09-08 20:23:25.000000000 -0700
    406 +++ linux-2.6.17.13/arch/mips/configs/qemu_defconfig    2006-09-09 10:17:04.000000000 -0700
    407 @@ -67,6 +67,7 @@
    408  CONFIG_GENERIC_FIND_NEXT_BIT=y
    409  CONFIG_GENERIC_HWEIGHT=y
    410  CONFIG_GENERIC_CALIBRATE_DELAY=y
    411 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    412  CONFIG_DMA_COHERENT=y
    413  CONFIG_GENERIC_ISA_DMA=y
    414  CONFIG_I8259=y
    415 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/rbhma4500_defconfig linux-2.6.17.13/arch/mips/configs/rbhma4500_defconfig
    416 --- linux-2.6.17.13.orig/arch/mips/configs/rbhma4500_defconfig  2006-09-08 20:23:25.000000000 -0700
    417 +++ linux-2.6.17.13/arch/mips/configs/rbhma4500_defconfig       2006-09-09 10:17:04.000000000 -0700
    418 @@ -74,6 +74,7 @@
    419  CONFIG_GENERIC_FIND_NEXT_BIT=y
    420  CONFIG_GENERIC_HWEIGHT=y
    421  CONFIG_GENERIC_CALIBRATE_DELAY=y
    422 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    423  CONFIG_DMA_NONCOHERENT=y
    424  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    425  CONFIG_GENERIC_ISA_DMA=y
    426 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/rm200_defconfig linux-2.6.17.13/arch/mips/configs/rm200_defconfig
    427 --- linux-2.6.17.13.orig/arch/mips/configs/rm200_defconfig      2006-09-08 20:23:25.000000000 -0700
    428 +++ linux-2.6.17.13/arch/mips/configs/rm200_defconfig   2006-09-09 10:17:04.000000000 -0700
    429 @@ -67,6 +67,7 @@
    430  CONFIG_GENERIC_FIND_NEXT_BIT=y
    431  CONFIG_GENERIC_HWEIGHT=y
    432  CONFIG_GENERIC_CALIBRATE_DELAY=y
    433 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    434  CONFIG_ARC=y
    435  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    436  CONFIG_DMA_NONCOHERENT=y
    437 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/sb1250-swarm_defconfig linux-2.6.17.13/arch/mips/configs/sb1250-swarm_defconfig
    438 --- linux-2.6.17.13.orig/arch/mips/configs/sb1250-swarm_defconfig       2006-09-08 20:23:25.000000000 -0700
    439 +++ linux-2.6.17.13/arch/mips/configs/sb1250-swarm_defconfig    2006-09-09 10:17:04.000000000 -0700
    440 @@ -84,6 +84,7 @@
    441  CONFIG_GENERIC_FIND_NEXT_BIT=y
    442  CONFIG_GENERIC_HWEIGHT=y
    443  CONFIG_GENERIC_CALIBRATE_DELAY=y
    444 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    445  CONFIG_DMA_COHERENT=y
    446  CONFIG_CPU_BIG_ENDIAN=y
    447  # CONFIG_CPU_LITTLE_ENDIAN is not set
    448 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/sead_defconfig linux-2.6.17.13/arch/mips/configs/sead_defconfig
    449 --- linux-2.6.17.13.orig/arch/mips/configs/sead_defconfig       2006-09-08 20:23:25.000000000 -0700
    450 +++ linux-2.6.17.13/arch/mips/configs/sead_defconfig    2006-09-09 10:17:04.000000000 -0700
    451 @@ -67,6 +67,7 @@
    452  CONFIG_GENERIC_FIND_NEXT_BIT=y
    453  CONFIG_GENERIC_HWEIGHT=y
    454  CONFIG_GENERIC_CALIBRATE_DELAY=y
    455 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    456  CONFIG_DMA_NONCOHERENT=y
    457  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    458  # CONFIG_CPU_BIG_ENDIAN is not set
    459 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/tb0226_defconfig linux-2.6.17.13/arch/mips/configs/tb0226_defconfig
    460 --- linux-2.6.17.13.orig/arch/mips/configs/tb0226_defconfig     2006-09-08 20:23:25.000000000 -0700
    461 +++ linux-2.6.17.13/arch/mips/configs/tb0226_defconfig  2006-09-09 10:17:04.000000000 -0700
    462 @@ -77,6 +77,7 @@
    463  CONFIG_GENERIC_FIND_NEXT_BIT=y
    464  CONFIG_GENERIC_HWEIGHT=y
    465  CONFIG_GENERIC_CALIBRATE_DELAY=y
    466 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    467  CONFIG_DMA_NONCOHERENT=y
    468  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    469  # CONFIG_CPU_BIG_ENDIAN is not set
    470 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/tb0229_defconfig linux-2.6.17.13/arch/mips/configs/tb0229_defconfig
    471 --- linux-2.6.17.13.orig/arch/mips/configs/tb0229_defconfig     2006-09-08 20:23:25.000000000 -0700
    472 +++ linux-2.6.17.13/arch/mips/configs/tb0229_defconfig  2006-09-09 10:17:04.000000000 -0700
    473 @@ -77,6 +77,7 @@
    474  CONFIG_GENERIC_FIND_NEXT_BIT=y
    475  CONFIG_GENERIC_HWEIGHT=y
    476  CONFIG_GENERIC_CALIBRATE_DELAY=y
    477 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    478  CONFIG_DMA_NONCOHERENT=y
    479  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    480  # CONFIG_CPU_BIG_ENDIAN is not set
    481 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/workpad_defconfig linux-2.6.17.13/arch/mips/configs/workpad_defconfig
    482 --- linux-2.6.17.13.orig/arch/mips/configs/workpad_defconfig    2006-09-08 20:23:25.000000000 -0700
    483 +++ linux-2.6.17.13/arch/mips/configs/workpad_defconfig 2006-09-09 10:17:04.000000000 -0700
    484 @@ -73,6 +73,7 @@
    485  CONFIG_GENERIC_FIND_NEXT_BIT=y
    486  CONFIG_GENERIC_HWEIGHT=y
    487  CONFIG_GENERIC_CALIBRATE_DELAY=y
    488 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    489  CONFIG_DMA_NONCOHERENT=y
    490  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    491  # CONFIG_CPU_BIG_ENDIAN is not set
    492 diff -Naur linux-2.6.17.13.orig/arch/mips/configs/yosemite_defconfig linux-2.6.17.13/arch/mips/configs/yosemite_defconfig
    493 --- linux-2.6.17.13.orig/arch/mips/configs/yosemite_defconfig   2006-09-08 20:23:25.000000000 -0700
    494 +++ linux-2.6.17.13/arch/mips/configs/yosemite_defconfig        2006-09-09 10:17:04.000000000 -0700
    495 @@ -68,6 +68,7 @@
    496  CONFIG_GENERIC_FIND_NEXT_BIT=y
    497  CONFIG_GENERIC_HWEIGHT=y
    498  CONFIG_GENERIC_CALIBRATE_DELAY=y
    499 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    500  CONFIG_DMA_COHERENT=y
    501  CONFIG_CPU_BIG_ENDIAN=y
    502  # CONFIG_CPU_LITTLE_ENDIAN is not set
    503 diff -Naur linux-2.6.17.13.orig/arch/mips/defconfig linux-2.6.17.13/arch/mips/defconfig
    504 --- linux-2.6.17.13.orig/arch/mips/defconfig    2006-09-08 20:23:25.000000000 -0700
    505 +++ linux-2.6.17.13/arch/mips/defconfig 2006-09-09 10:17:04.000000000 -0700
    506 @@ -67,6 +67,7 @@
    507  CONFIG_GENERIC_FIND_NEXT_BIT=y
    508  CONFIG_GENERIC_HWEIGHT=y
    509  CONFIG_GENERIC_CALIBRATE_DELAY=y
    510 +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
    511  CONFIG_ARC=y
    512  CONFIG_DMA_NONCOHERENT=y
    513  CONFIG_DMA_NEED_PCI_MAP_STATE=y
    514 diff -Naur linux-2.6.17.13.orig/arch/mips/Kconfig linux-2.6.17.13/arch/mips/Kconfig
    515 --- linux-2.6.17.13.orig/arch/mips/Kconfig      2006-09-08 20:23:25.000000000 -0700
    516 +++ linux-2.6.17.13/arch/mips/Kconfig   2006-09-09 10:17:04.000000000 -0700
    517 @@ -278,6 +278,7 @@
     354@@ -168,6 +167,7 @@
     355 CONFIG_SYSVIPC=y
     356 # CONFIG_POSIX_MQUEUE is not set
     357 # CONFIG_BSD_PROCESS_ACCT is not set
     358+# CONFIG_TASKSTATS is not set
     359 CONFIG_SYSCTL=y
     360 # CONFIG_AUDIT is not set
     361 # CONFIG_IKCONFIG is not set
     362@@ -841,7 +841,7 @@
     363 # CONFIG_USB_LEGOTOWER is not set
     364 # CONFIG_USB_LCD is not set
     365 # CONFIG_USB_LED is not set
     366-# CONFIG_USB_CY7C63 is not set
     367+# CONFIG_USB_CYPRESS_CY7C63 is not set
     368 # CONFIG_USB_CYTHERM is not set
     369 # CONFIG_USB_PHIDGETKIT is not set
     370 # CONFIG_USB_PHIDGETSERVO is not set
     371@@ -982,7 +982,6 @@
     372 # CONFIG_RPCSEC_GSS_SPKM3 is not set
     373 # CONFIG_SMB_FS is not set
     374 # CONFIG_CIFS is not set
     375-# CONFIG_CIFS_DEBUG2 is not set
     376 # CONFIG_NCP_FS is not set
     377 # CONFIG_CODA_FS is not set
     378 # CONFIG_AFS_FS is not set
     379@@ -1007,6 +1006,7 @@
     380 #
     381 # Kernel hacking
     382 #
     383+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
     384 # CONFIG_PRINTK_TIME is not set
     385 # CONFIG_MAGIC_SYSRQ is not set
     386 # CONFIG_UNUSED_SYMBOLS is not set
     387@@ -1014,7 +1014,7 @@
     388 CONFIG_LOG_BUF_SHIFT=14
     389 # CONFIG_DEBUG_FS is not set
     390 CONFIG_CROSSCOMPILE=y
     391-CONFIG_CMDLINE="mem=32M console=ttyVR0,19200"
     392+CONFIG_CMDLINE="mem=32M console=ttyVR0,19200 ide0=0x170,0x376,73"
     393 
     394 #
     395 # Security options
     396diff -Naur linux-2.6.18/arch/mips/configs/workpad_defconfig linux-2.6.18.mips/arch/mips/configs/workpad_defconfig
     397--- linux-2.6.18/arch/mips/configs/workpad_defconfig    2006-09-19 20:42:06.000000000 -0700
     398+++ linux-2.6.18.mips/arch/mips/configs/workpad_defconfig       2006-09-20 06:55:21.000000000 -0700
     399@@ -1,7 +1,7 @@
     400 #
     401 # Automatically generated make config: don't edit
     402-# Linux kernel version: 2.6.18-rc1
     403-# Thu Jul  6 10:04:21 2006
     404+# Linux kernel version: 2.6.18-rc2
     405+# Tue Jul 25 23:13:04 2006
     406 #
     407 CONFIG_MIPS=y
     408 
     409@@ -166,6 +166,7 @@
     410 CONFIG_SYSVIPC=y
     411 # CONFIG_POSIX_MQUEUE is not set
     412 # CONFIG_BSD_PROCESS_ACCT is not set
     413+# CONFIG_TASKSTATS is not set
     414 CONFIG_SYSCTL=y
     415 # CONFIG_AUDIT is not set
     416 # CONFIG_IKCONFIG is not set
     417@@ -379,6 +380,7 @@
     418 CONFIG_BLK_DEV_RAM=m
     419 CONFIG_BLK_DEV_RAM_COUNT=16
     420 CONFIG_BLK_DEV_RAM_SIZE=4096
     421+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
     422 # CONFIG_BLK_DEV_INITRD is not set
     423 # CONFIG_CDROM_PKTCDVD is not set
     424 # CONFIG_ATA_OVER_ETH is not set
     425@@ -855,7 +857,6 @@
     426 # CONFIG_RPCSEC_GSS_SPKM3 is not set
     427 # CONFIG_SMB_FS is not set
     428 # CONFIG_CIFS is not set
     429-# CONFIG_CIFS_DEBUG2 is not set
     430 # CONFIG_NCP_FS is not set
     431 # CONFIG_CODA_FS is not set
     432 # CONFIG_AFS_FS is not set
     433@@ -880,6 +881,7 @@
     434 #
     435 # Kernel hacking
     436 #
     437+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
     438 # CONFIG_PRINTK_TIME is not set
     439 # CONFIG_MAGIC_SYSRQ is not set
     440 # CONFIG_UNUSED_SYMBOLS is not set
     441@@ -887,7 +889,7 @@
     442 CONFIG_LOG_BUF_SHIFT=14
     443 # CONFIG_DEBUG_FS is not set
     444 CONFIG_CROSSCOMPILE=y
     445-CONFIG_CMDLINE="console=ttyVR0,19200 mem=16M"
     446+CONFIG_CMDLINE="console=ttyVR0,19200 ide0=0x170,0x376,49 mem=16M"
     447 
     448 #
     449 # Security options
     450diff -Naur linux-2.6.18/arch/mips/Kconfig linux-2.6.18.mips/arch/mips/Kconfig
     451--- linux-2.6.18/arch/mips/Kconfig      2006-09-19 20:42:06.000000000 -0700
     452+++ linux-2.6.18.mips/arch/mips/Kconfig 2006-09-20 06:55:21.000000000 -0700
     453@@ -126,7 +126,6 @@
     454        select IRQ_CPU
     455        select IRQ_CPU_RM7K
     456        select IRQ_CPU_RM9K
     457-       select SERIAL_RM9000
     458        select SYS_HAS_CPU_RM9000
     459        select SYS_SUPPORTS_32BIT_KERNEL
     460        select SYS_SUPPORTS_64BIT_KERNEL
     461@@ -480,7 +479,6 @@
     462        select SYS_SUPPORTS_32BIT_KERNEL
    518463        select SYS_SUPPORTS_64BIT_KERNEL
    519464        select SYS_SUPPORTS_BIG_ENDIAN
    520         select SYS_SUPPORTS_LITTLE_ENDIAN
    521 +       select SYS_SUPPORTS_MULTITHREADING if EXPERIMENTAL
     465-       select ARCH_SPARSEMEM_ENABLE
    522466        help
    523           This enables support for the MIPS Technologies Atlas evaluation
    524           board.
    525 @@ -294,6 +295,7 @@
    526         select I8259
    527         select MIPS_BOARDS_GEN
    528         select MIPS_BONITO64
    529 +       select MIPS_CPU_SCACHE
    530         select MIPS_GT64120
    531         select MIPS_MSC
    532         select SWAP_IO_SPACE
    533 @@ -306,6 +308,7 @@
    534         select SYS_SUPPORTS_64BIT_KERNEL
    535         select SYS_SUPPORTS_BIG_ENDIAN
    536         select SYS_SUPPORTS_LITTLE_ENDIAN
    537 +       select SYS_SUPPORTS_MULTITHREADING
    538         help
    539           This enables support for the MIPS Technologies Malta evaluation
    540           board.
    541 @@ -438,11 +441,13 @@
    542  
    543  config PNX8550_V2PCI
    544         bool "Philips PNX8550 based Viper2-PCI board"
    545 +       depends on BROKEN
    546         select PNX8550
    547         select SYS_SUPPORTS_LITTLE_ENDIAN
    548  
    549  config PNX8550_JBS
    550         bool "Philips PNX8550 based JBS board"
    551 +       depends on BROKEN
    552         select PNX8550
    553         select SYS_SUPPORTS_LITTLE_ENDIAN
    554  
    555 @@ -506,8 +511,6 @@
     467          The Ocelot is a MIPS-based Single Board Computer (SBC) made by
     468          Momentum Computer <http://www.momenco.com/>.
     469@@ -524,8 +522,6 @@
    556470 config MACH_VR41XX
    557471        bool "NEC VR41XX-based machines"
     
    562476 config PMC_YOSEMITE
    563477        bool "PMC-Sierra Yosemite eval board"
    564 @@ -522,6 +525,7 @@
     478@@ -614,6 +610,7 @@
    565479        select SYS_SUPPORTS_64BIT_KERNEL
    566480        select SYS_SUPPORTS_BIG_ENDIAN
    567         select SYS_SUPPORTS_HIGHMEM
    568 +       select SYS_SUPPORTS_SMP
    569         help
    570           Yosemite is an evaluation board for the RM9000x2 processor
    571           manufactured by PMC-Sierra.
    572 @@ -555,6 +559,7 @@
    573         select HW_HAS_EISA
    574         select IP22_CPU_SCACHE
    575         select IRQ_CPU
    576 +       select NO_ISA if ISA
    577         select SWAP_IO_SPACE
    578         select SYS_HAS_CPU_R4X00
    579         select SYS_HAS_CPU_R5000
    580 @@ -577,6 +582,7 @@
    581         select SYS_HAS_CPU_R10000
    582         select SYS_SUPPORTS_64BIT_KERNEL
    583         select SYS_SUPPORTS_BIG_ENDIAN
     481        select SYS_SUPPORTS_NUMA
    584482+       select SYS_SUPPORTS_SMP
    585483        help
    586484          This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
    587485          workstations.  To compile a Linux kernel that runs on these, say Y
    588 @@ -1035,6 +1041,9 @@
    589  config HAVE_STD_PC_SERIAL_PORT
    590         bool
    591  
    592 +config VR4181
    593 +       bool
    594 +
    595  config ARC_CONSOLE
    596         bool "ARC console support"
    597         depends on SGI_IP22 || SNI_RM200_PCI
    598 @@ -1155,7 +1164,7 @@
     486@@ -1200,7 +1197,7 @@
    599487        select CPU_SUPPORTS_32BIT_KERNEL
    600488        select CPU_SUPPORTS_64BIT_KERNEL
     
    605493          kernel built with this option will not run on any other type of
    606494          processor or vice versa.
    607 @@ -1211,7 +1220,7 @@
    608         select CPU_SUPPORTS_32BIT_KERNEL
     495@@ -1527,6 +1524,7 @@
     496        select CPU_MIPSR2_SRS
     497        select MIPS_MT
     498        select SMP
     499+       select SYS_SUPPORTS_SMP
    609500        help
    610           MIPS Technologies R6000 and R6000A series processors.  Note these
    611 -         processors are extremly rare and the support for them is incomplete.
    612 +         processors are extremely rare and the support for them is incomplete.
    613  
    614  config CPU_NEVADA
    615         bool "RM52xx"
    616 @@ -1332,7 +1341,7 @@
    617  endmenu
     501          This is a kernel model which is known a SMTC or lately has been
     502          marketesed into SMVP.
     503@@ -1538,6 +1536,7 @@
     504        select CPU_MIPSR2_SRS
     505        select MIPS_MT
     506        select SMP
     507+       select SYS_SUPPORTS_SMP
     508        help
     509          This is a kernel model which is also known a VSMP or lately
     510          has been marketesed into SMVP.
     511@@ -1649,9 +1648,7 @@
     512        default y
     513 
     514 config IRQ_PER_CPU
     515-       depends on SMP
     516        bool
     517-       default y
    618518 
    619519 #
    620 -# These two indicate any levelof the MIPS32 and MIPS64 architecture
    621 +# These two indicate any level of the MIPS32 and MIPS64 architecture
    622  #
    623  config CPU_MIPS32
     520 # - Highmem only makes sense for the 32-bit kernel.
     521@@ -1691,9 +1688,6 @@
     522 
     523 config ARCH_SPARSEMEM_ENABLE
    624524        bool
    625 @@ -1343,7 +1352,7 @@
    626         default y if CPU_MIPS64_R1 || CPU_MIPS64_R2
    627  
    628  #
    629 -# These two indicate the revision of the architecture, either 32 bot 64 bit.
    630 +# These two indicate the revision of the architecture, either Release 1 or Release 2
    631  #
    632  config CPU_MIPSR1
    633         bool
    634 @@ -1436,6 +1445,13 @@
    635         bool
    636         select BOARD_SCACHE
    637  
    638 +#
    639 +# Support for a MIPS32 / MIPS64 style S-caches
    640 +#
    641 +config MIPS_CPU_SCACHE
    642 +       bool
    643 +       select BOARD_SCACHE
    644 +
    645  config R5000_CPU_SCACHE
    646         bool
    647         select BOARD_SCACHE
    648 @@ -1455,32 +1471,57 @@
    649  config CPU_HAS_PREFETCH
    650         bool
    651  
    652 -config MIPS_MT
    653 -       bool "Enable MIPS MT"
    654525-
    655  choice
    656         prompt "MIPS MT options"
    657 -       depends on MIPS_MT
    658 +
    659 +config MIPS_MT_DISABLED
    660 +       bool "Disable multithreading support."
    661 +       help
    662 +         Use this option if your workload can't take advantage of
    663 +         MIPS hardware multithreading support.  On systems that don't have
    664 +         the option of an MT-enabled processor this option will be the only
    665 +         option in this menu.
    666  
    667  config MIPS_MT_SMTC
    668         bool "SMTC: Use all TCs on all VPEs for SMP"
    669 +       depends on CPU_MIPS32_R2
    670 +       #depends on CPU_MIPS64_R2               # once there is hardware ...
    671 +       depends on SYS_SUPPORTS_MULTITHREADING
    672         select CPU_MIPSR2_IRQ_VI
    673         select CPU_MIPSR2_SRS
    674 +       select MIPS_MT
    675         select SMP
    676 +       help
    677 +         This is a kernel model which is known a SMTC or lately has been
    678 +         marketesed into SMVP.
    679  
    680  config MIPS_MT_SMP
    681         bool "Use 1 TC on each available VPE for SMP"
    682 +       depends on SYS_SUPPORTS_MULTITHREADING
    683 +       select CPU_MIPSR2_IRQ_VI
    684 +       select CPU_MIPSR2_SRS
    685 +       select MIPS_MT
    686         select SMP
    687 +       help
    688 +         This is a kernel model which is also known a VSMP or lately
    689 +         has been marketesed into SMVP.
    690  
    691  config MIPS_VPE_LOADER
    692         bool "VPE loader support."
    693 -       depends on MIPS_MT
    694 +       depends on SYS_SUPPORTS_MULTITHREADING
    695 +       select MIPS_MT
    696         help
    697           Includes a loader for loading an elf relocatable object
    698           onto another VPE and running it.
    699  
    700  endchoice
    701  
    702 +config MIPS_MT
    703 +       bool
    704 +
    705 +config SYS_SUPPORTS_MULTITHREADING
    706 +       bool
    707 +
    708  config MIPS_MT_FPAFF
    709         bool "Dynamic FPU affinity for FP-intensive threads"
    710         depends on MIPS_MT
    711 @@ -1537,32 +1578,23 @@
    712  config CPU_HAS_WB
    713         bool
    714  
    715 +#
    716 +# Vectored interrupt mode is an R2 feature
    717 +#
    718  config CPU_MIPSR2_IRQ_VI
    719 -       bool "Vectored interrupt mode"
    720 -       depends on CPU_MIPSR2
    721 -       help
    722 -          Vectored interrupt mode allowing faster dispatching of interrupts.
    723 -          The board support code needs to be written to take advantage of this
    724 -          mode.  Compatibility code is included to allow the kernel to run on
    725 -          a CPU that does not support vectored interrupts.  It's safe to
    726 -          say Y here.
    727 +       bool
    728  
    729 +#
    730 +# Extended interrupt mode is an R2 feature
    731 +#
    732  config CPU_MIPSR2_IRQ_EI
    733 -       bool "External interrupt controller mode"
    734 -       depends on CPU_MIPSR2
    735 -       help
    736 -          Extended interrupt mode takes advantage of an external interrupt
    737 -          controller to allow fast dispatching from many possible interrupt
    738 -          sources. Say N unless you know that external interrupt support is
    739 -          required.
    740 +       bool
    741  
    742 +#
    743 +# Shadow registers are an R2 feature
    744 +#
    745  config CPU_MIPSR2_SRS
    746 -       bool "Make shadow set registers available for interrupt handlers"
    747 -       depends on CPU_MIPSR2_IRQ_VI || CPU_MIPSR2_IRQ_EI
    748 -       help
    749 -          Allow the kernel to use shadow register sets for fast interrupts.
    750 -          Interrupt handlers must be specially written to use shadow sets.
    751 -          Say N unless you know that shadow register set upport is needed.
    752 +       bool
    753  
    754  config CPU_HAS_SYNC
    755         bool
    756 @@ -1616,8 +1648,8 @@
    757  
     526-config ARCH_SPARSEMEM_ENABLE
     527-       bool
     528        select SPARSEMEM_STATIC
     529 
     530 config NUMA
     531@@ -1719,6 +1713,7 @@
    758532 config SMP
    759533        bool "Multi-Processing support"
    760 -       depends on CPU_RM9000 || ((SIBYTE_BCM1x80 || SIBYTE_BCM1x55 || SIBYTE_SB1250 || QEMU) && !SIBYTE_STANDALONE) || SGI_IP27 || MIPS_MT_SMP || MIPS_MT_SMTC
    761 -       ---help---
    762 +       depends on SYS_SUPPORTS_SMP
    763 +       help
     534        depends on SYS_SUPPORTS_SMP
     535+       select IRQ_PER_CPU
     536        help
    764537          This enables support for systems with more than one CPU. If you have
    765538          a system with only one CPU, like most personal computers, say N. If
    766           you have a system with more than one CPU, say Y.
    767 @@ -1636,6 +1668,9 @@
    768  
    769           If you don't know what to do here, say N.
    770  
    771 +config SYS_SUPPORTS_SMP
    772 +       bool
    773 +
    774  config NR_CPUS
    775         int "Maximum number of CPUs (2-64)"
    776         range 2 64
    777 @@ -1710,6 +1745,9 @@
    778  config ISA
    779         bool
    780  
    781 +config NO_ISA
    782 +       bool
    783 +
    784  config EISA
    785         bool "EISA support"
    786         depends on HW_HAS_EISA
    787 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/cpu-probe.c linux-2.6.17.13/arch/mips/kernel/cpu-probe.c
    788 --- linux-2.6.17.13.orig/arch/mips/kernel/cpu-probe.c   2006-09-08 20:23:25.000000000 -0700
    789 +++ linux-2.6.17.13/arch/mips/kernel/cpu-probe.c        2006-09-09 10:17:04.000000000 -0700
    790 @@ -111,7 +111,6 @@
     539diff -Naur linux-2.6.18/arch/mips/kernel/cpu-probe.c linux-2.6.18.mips/arch/mips/kernel/cpu-probe.c
     540--- linux-2.6.18/arch/mips/kernel/cpu-probe.c   2006-09-19 20:42:06.000000000 -0700
     541+++ linux-2.6.18.mips/arch/mips/kernel/cpu-probe.c      2006-09-20 06:55:21.000000000 -0700
     542@@ -38,15 +38,40 @@
     543 
     544 static void r39xx_wait(void)
     545 {
     546-       unsigned long cfg = read_c0_conf();
     547-       write_c0_conf(cfg | TX39_CONF_HALT);
     548+       local_irq_disable();
     549+       if (!need_resched())
     550+               write_c0_conf(read_c0_conf() | TX39_CONF_HALT);
     551+       local_irq_enable();
     552 }
     553 
     554+/*
     555+ * There is a race when WAIT instruction executed with interrupt
     556+ * enabled.
     557+ * But it is implementation-dependent wheter the pipelie restarts when
     558+ * a non-enabled interrupt is requested.
     559+ */
     560 static void r4k_wait(void)
     561 {
     562-       __asm__(".set\tmips3\n\t"
     563-               "wait\n\t"
     564-               ".set\tmips0");
     565+       __asm__("       .set    mips3                   \n"
     566+               "       wait                            \n"
     567+               "       .set    mips0                   \n");
     568+}
     569+
     570+/*
     571+ * This variant is preferable as it allows testing need_resched and going to
     572+ * sleep depending on the outcome atomically.  Unfortunately the "It is
     573+ * implementation-dependent whether the pipeline restarts when a non-enabled
     574+ * interrupt is requested" restriction in the MIPS32/MIPS64 architecture makes
     575+ * using this version a gamble.
     576+ */
     577+static void r4k_wait_irqoff(void)
     578+{
     579+       local_irq_disable();
     580+       if (!need_resched())
     581+               __asm__("       .set    mips3           \n"
     582+                       "       wait                    \n"
     583+                       "       .set    mips0           \n");
     584+       local_irq_enable();
     585 }
     586 
     587 /* The Au1xxx wait is available only if using 32khz counter or
     588@@ -56,17 +81,17 @@
     589 static void au1k_wait(void)
     590 {
     591        /* using the wait instruction makes CP0 counter unusable */
     592-       __asm__(".set mips3\n\t"
     593-               "cache 0x14, 0(%0)\n\t"
     594-               "cache 0x14, 32(%0)\n\t"
     595-               "sync\n\t"
     596-               "nop\n\t"
     597-               "wait\n\t"
     598-               "nop\n\t"
     599-               "nop\n\t"
     600-               "nop\n\t"
     601-               "nop\n\t"
     602-               ".set mips0\n\t"
     603+       __asm__("       .set    mips3                   \n"
     604+               "       cache   0x14, 0(%0)             \n"
     605+               "       cache   0x14, 32(%0)            \n"
     606+               "       sync                            \n"
     607+               "       nop                             \n"
     608+               "       wait                            \n"
     609+               "       nop                             \n"
     610+               "       nop                             \n"
     611+               "       nop                             \n"
     612+               "       nop                             \n"
     613+               "       .set    mips0                   \n"
     614                : : "r" (au1k_wait));
     615 }
     616 
     617@@ -110,8 +135,6 @@
    791618        case CPU_R5000:
    792619        case CPU_NEVADA:
    793620        case CPU_RM7000:
    794621-       case CPU_RM9000:
    795         case CPU_TX49XX:
     622-       case CPU_TX49XX:
    796623        case CPU_4KC:
    797624        case CPU_4KEC:
    798 @@ -137,6 +136,14 @@
     625        case CPU_4KSC:
     626@@ -125,6 +148,10 @@
     627                cpu_wait = r4k_wait;
     628                printk(" available.\n");
     629                break;
     630+       case CPU_TX49XX:
     631+               cpu_wait = r4k_wait_irqoff;
     632+               printk(" available.\n");
     633+               break;
     634        case CPU_AU1000:
     635        case CPU_AU1100:
     636        case CPU_AU1500:
     637@@ -136,6 +163,14 @@
    799638                } else
    800639                        printk(" unavailable.\n");
     
    811650                printk(" unavailable.\n");
    812651                break;
    813 @@ -243,9 +250,15 @@
    814                 break;
    815         case PRID_IMP_VR41XX:
    816                 switch (c->processor_id & 0xf0) {
    817 +#ifndef CONFIG_VR4181
    818                 case PRID_REV_VR4111:
    819                         c->cputype = CPU_VR4111;
    820                         break;
    821 +#else
    822 +               case PRID_REV_VR4181:
    823 +                       c->cputype = CPU_VR4181;
    824 +                       break;
    825 +#endif
    826                 case PRID_REV_VR4121:
    827                         c->cputype = CPU_VR4121;
    828                         break;
    829 @@ -597,8 +610,6 @@
    830                 break;
    831         case PRID_IMP_25KF:
    832                 c->cputype = CPU_25KF;
    833 -               /* Probe for L2 cache */
    834 -               c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
    835                 break;
    836         case PRID_IMP_34K:
    837                 c->cputype = CPU_34K;
    838 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/entry.S linux-2.6.17.13/arch/mips/kernel/entry.S
    839 --- linux-2.6.17.13.orig/arch/mips/kernel/entry.S       2006-09-08 20:23:25.000000000 -0700
    840 +++ linux-2.6.17.13/arch/mips/kernel/entry.S    2006-09-09 10:17:04.000000000 -0700
    841 @@ -87,7 +87,7 @@
    842         ori     v1, v0, TCSTATUS_IXMT
    843         mtc0    v1, CP0_TCSTATUS
    844         andi    v0, TCSTATUS_IXMT
    845 -       ehb
    846 +       _ehb
    847         mfc0    t0, CP0_TCCONTEXT
    848         DMT     9                               # dmt t1
    849         jal     mips_ihb
    850 @@ -95,7 +95,7 @@
    851         andi    t3, t0, 0xff00
    852         or      t2, t2, t3
    853         mtc0    t2, CP0_STATUS
    854 -       ehb
    855 +       _ehb
    856         andi    t1, t1, VPECONTROL_TE
    857         beqz    t1, 1f
    858         EMT
    859 @@ -105,7 +105,7 @@
    860         xori    v1, v1, TCSTATUS_IXMT
    861         or      v1, v0, v1
    862         mtc0    v1, CP0_TCSTATUS
    863 -       ehb
    864 +       _ehb
    865         xor     t0, t0, t3
    866         mtc0    t0, CP0_TCCONTEXT
    867  #endif /* CONFIG_MIPS_MT_SMTC */
    868 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/gdb-low.S linux-2.6.17.13/arch/mips/kernel/gdb-low.S
    869 --- linux-2.6.17.13.orig/arch/mips/kernel/gdb-low.S     2006-09-08 20:23:25.000000000 -0700
    870 +++ linux-2.6.17.13/arch/mips/kernel/gdb-low.S  2006-09-09 10:17:04.000000000 -0700
    871 @@ -291,7 +291,7 @@
    872                 ori     t1, t2, TCSTATUS_IXMT
    873                 mtc0    t1, CP0_TCSTATUS
    874                 andi    t2, t2, TCSTATUS_IXMT
    875 -               ehb
    876 +               _ehb
    877                 DMT     9                               # dmt   t1
    878                 jal     mips_ihb
    879                 nop
    880 @@ -310,7 +310,7 @@
    881                 xori    t1, t1, TCSTATUS_IXMT
    882                 or      t1, t1, t2
    883                 mtc0    t1, CP0_TCSTATUS
    884 -               ehb
    885 +               _ehb
    886  #endif /* CONFIG_MIPS_MT_SMTC */
    887                 LONG_L  v0, GDB_FR_STATUS(sp)
    888                 LONG_L  v1, GDB_FR_EPC(sp)
    889 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/genex.S linux-2.6.17.13/arch/mips/kernel/genex.S
    890 --- linux-2.6.17.13.orig/arch/mips/kernel/genex.S       2006-09-08 20:23:25.000000000 -0700
    891 +++ linux-2.6.17.13/arch/mips/kernel/genex.S    2006-09-09 10:17:04.000000000 -0700
    892 @@ -214,7 +214,7 @@
    893         mtc0    t0, CP0_TCCONTEXT
    894         xor     t1, t1, t0
    895         mtc0    t1, CP0_STATUS
    896 -       ehb
    897 +       _ehb
    898  #endif /* CONFIG_MIPS_MT_SMTC */
    899         CLI
    900         move    a0, sp
    901 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/head.S linux-2.6.17.13/arch/mips/kernel/head.S
    902 --- linux-2.6.17.13.orig/arch/mips/kernel/head.S        2006-09-08 20:23:25.000000000 -0700
    903 +++ linux-2.6.17.13/arch/mips/kernel/head.S     2006-09-09 10:17:04.000000000 -0700
    904 @@ -96,7 +96,7 @@
    905         /* Clear TKSU, leave IXMT */
    906         xori    t0, 0x00001800
    907         mtc0    t0, CP0_TCSTATUS
    908 -       ehb
    909 +       _ehb
    910         /* We need to leave the global IE bit set, but clear EXL...*/
    911         mfc0    t0, CP0_STATUS
    912         or      t0, ST0_CU0 | ST0_EXL | ST0_ERL | \set | \clr
    913 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/irixsig.c linux-2.6.17.13/arch/mips/kernel/irixsig.c
    914 --- linux-2.6.17.13.orig/arch/mips/kernel/irixsig.c     2006-09-08 20:23:25.000000000 -0700
    915 +++ linux-2.6.17.13/arch/mips/kernel/irixsig.c  2006-09-09 10:17:04.000000000 -0700
    916 @@ -185,9 +185,6 @@
     652diff -Naur linux-2.6.18/arch/mips/kernel/irixsig.c linux-2.6.18.mips/arch/mips/kernel/irixsig.c
     653--- linux-2.6.18/arch/mips/kernel/irixsig.c     2006-09-19 20:42:06.000000000 -0700
     654+++ linux-2.6.18.mips/arch/mips/kernel/irixsig.c        2006-09-20 06:55:21.000000000 -0700
     655@@ -17,6 +17,7 @@
     656 
     657 #include <asm/ptrace.h>
     658 #include <asm/uaccess.h>
     659+#include <asm/unistd.h>
     660 
     661 #undef DEBUG_SIG
     662 
     663@@ -172,11 +173,12 @@
     664        return ret;
     665 }
     666 
     667-asmlinkage int do_irix_signal(sigset_t *oldset, struct pt_regs *regs)
     668+void do_irix_signal(struct pt_regs *regs)
     669 {
     670        struct k_sigaction ka;
     671        siginfo_t info;
     672        int signr;
     673+       sigset_t *oldset;
     674 
     675        /*
     676         * We want the common case to go fast, which is why we may in certain
     677@@ -184,19 +186,28 @@
     678         * if so.
     679         */
    917680        if (!user_mode(regs))
    918                 return 1;
     681-               return 1;
     682+               return;
    919683 
    920684-       if (try_to_freeze())
    921685-               goto no_signal;
    922686-
    923         if (!oldset)
     687-       if (!oldset)
     688+       if (test_thread_flag(TIF_RESTORE_SIGMASK))
     689+               oldset = &current->saved_sigmask;
     690+       else
    924691                oldset = &current->blocked;
    925692 
    926 @@ -195,7 +192,6 @@
    927         if (signr > 0)
    928                 return handle_signal(signr, &info, &ka, oldset, regs);
     693        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
     694-       if (signr > 0)
     695-               return handle_signal(signr, &info, &ka, oldset, regs);
     696+       if (signr > 0) {
     697+               /* Whee!  Actually deliver the signal.  */
     698+               if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
     699+                       /* a signal was successfully delivered; the saved
     700+                        * sigmask will have been stored in the signal frame,
     701+                        * and will be restored by sigreturn, so we can simply
     702+                        * clear the TIF_RESTORE_SIGMASK flag */
     703+                       if (test_thread_flag(TIF_RESTORE_SIGMASK))
     704+                               clear_thread_flag(TIF_RESTORE_SIGMASK);
     705+               }
     706+
     707+               return;
     708+       }
    929709 
    930710-no_signal:
     
    932712         * Who's code doesn't conform to the restartable syscall convention
    933713         * dies here!!!  The li instruction, a single machine instruction,
    934 @@ -207,6 +203,7 @@
     714@@ -208,8 +219,22 @@
    935715                    regs->regs[2] == ERESTARTNOINTR) {
    936716                        regs->cp0_epc -= 8;
    937717                }
     718+               if (regs->regs[2] == ERESTART_RESTARTBLOCK) {
     719+                       regs->regs[2] = __NR_restart_syscall;
     720+                       regs->regs[7] = regs->regs[26];
     721+                       regs->cp0_epc -= 4;
     722+               }
    938723+               regs->regs[0] = 0;      /* Don't deal with this again.  */
     724+       }
     725+
     726+       /*
     727+       * If there's no signal to deliver, we just put the saved sigmask
     728+       * back
     729+       */
     730+       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
     731+               clear_thread_flag(TIF_RESTORE_SIGMASK);
     732+               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
    939733        }
     734-       return 0;
     735 }
     736 
     737 asmlinkage void
     738@@ -413,7 +438,7 @@
     739 
     740 asmlinkage int irix_sigsuspend(struct pt_regs *regs)
     741 {
     742-       sigset_t saveset, newset;
     743+       sigset_t newset;
     744        sigset_t __user *uset;
     745 
     746        uset = (sigset_t __user *) regs->regs[4];
     747@@ -422,18 +447,15 @@
     748        sigdelsetmask(&newset, ~_BLOCKABLE);
     749 
     750        spin_lock_irq(&current->sighand->siglock);
     751-       saveset = current->blocked;
     752+       current->saved_sigmask = current->blocked;
     753        current->blocked = newset;
     754        recalc_sigpending();
     755        spin_unlock_irq(&current->sighand->siglock);
     756 
     757-       regs->regs[2] = -EINTR;
     758-       while (1) {
     759-               current->state = TASK_INTERRUPTIBLE;
     760-               schedule();
     761-               if (do_irix_signal(&saveset, regs))
     762-                       return -EINTR;
     763-       }
     764+       current->state = TASK_INTERRUPTIBLE;
     765+       schedule();
     766+       set_thread_flag(TIF_RESTORE_SIGMASK);
     767+       return -ERESTARTNOHAND;
     768 }
     769 
     770 /* hate hate hate... */
     771diff -Naur linux-2.6.18/arch/mips/kernel/linux32.c linux-2.6.18.mips/arch/mips/kernel/linux32.c
     772--- linux-2.6.18/arch/mips/kernel/linux32.c     2006-09-19 20:42:06.000000000 -0700
     773+++ linux-2.6.18.mips/arch/mips/kernel/linux32.c        2006-09-20 06:55:21.000000000 -0700
     774@@ -1296,9 +1296,3 @@
     775        return do_fork(clone_flags, newsp, &regs, 0,
     776                       parent_tidptr, child_tidptr);
     777 }
     778-
     779-extern asmlinkage void sys_set_thread_area(u32 addr);
     780-asmlinkage void sys32_set_thread_area(u32 addr)
     781-{
     782-       sys_set_thread_area(AA(addr));
     783-}
     784diff -Naur linux-2.6.18/arch/mips/kernel/mips-mt.c linux-2.6.18.mips/arch/mips/kernel/mips-mt.c
     785--- linux-2.6.18/arch/mips/kernel/mips-mt.c     2006-09-19 20:42:06.000000000 -0700
     786+++ linux-2.6.18.mips/arch/mips/kernel/mips-mt.c        2006-09-20 06:55:21.000000000 -0700
     787@@ -96,6 +96,10 @@
     788                goto out_unlock;
     789        }
     790 
     791+       retval = security_task_setscheduler(p, 0, NULL);
     792+       if (retval)
     793+               goto out_unlock;
     794+
     795        /* Record new user-specified CPU set for future reference */
     796        p->thread.user_cpus_allowed = new_mask;
     797 
     798@@ -141,8 +145,9 @@
     799        p = find_process_by_pid(pid);
     800        if (!p)
     801                goto out_unlock;
     802-
     803-       retval = 0;
     804+       retval = security_task_getscheduler(p);
     805+       if (retval)
     806+               goto out_unlock;
     807 
     808        cpus_and(mask, p->thread.user_cpus_allowed, cpu_possible_map);
     809 
     810diff -Naur linux-2.6.18/arch/mips/kernel/process.c linux-2.6.18.mips/arch/mips/kernel/process.c
     811--- linux-2.6.18/arch/mips/kernel/process.c     2006-09-19 20:42:06.000000000 -0700
     812+++ linux-2.6.18.mips/arch/mips/kernel/process.c        2006-09-20 06:55:21.000000000 -0700
     813@@ -281,62 +281,63 @@
     814 } *schedule_frame, mfinfo[64];
     815 static int mfinfo_num;
     816 
     817-static int __init get_frame_info(struct mips_frame_info *info)
     818+static inline int is_ra_save_ins(union mips_instruction *ip)
     819 {
     820-       int i;
     821-       void *func = info->func;
     822-       union mips_instruction *ip = (union mips_instruction *)func;
     823+       /* sw / sd $ra, offset($sp) */
     824+       return (ip->i_format.opcode == sw_op || ip->i_format.opcode == sd_op) &&
     825+               ip->i_format.rs == 29 &&
     826+               ip->i_format.rt == 31;
     827+}
     828+
     829+static inline int is_jal_jalr_jr_ins(union mips_instruction *ip)
     830+{
     831+       if (ip->j_format.opcode == jal_op)
     832+               return 1;
     833+       if (ip->r_format.opcode != spec_op)
     834+               return 0;
     835+       return ip->r_format.func == jalr_op || ip->r_format.func == jr_op;
     836+}
     837+
     838+static inline int is_sp_move_ins(union mips_instruction *ip)
     839+{
     840+       /* addiu/daddiu sp,sp,-imm */
     841+       if (ip->i_format.rs != 29 || ip->i_format.rt != 29)
     842+               return 0;
     843+       if (ip->i_format.opcode == addiu_op || ip->i_format.opcode == daddiu_op)
     844+               return 1;
     845+       return 0;
     846+}
     847+
     848+static int get_frame_info(struct mips_frame_info *info)
     849+{
     850+       union mips_instruction *ip = info->func;
     851+       int i, max_insns =
     852+               min(128UL, info->func_size / sizeof(union mips_instruction));
     853+
     854        info->pc_offset = -1;
     855        info->frame_size = 0;
     856-       for (i = 0; i < 128; i++, ip++) {
     857-               /* if jal, jalr, jr, stop. */
     858-               if (ip->j_format.opcode == jal_op ||
     859-                   (ip->r_format.opcode == spec_op &&
     860-                    (ip->r_format.func == jalr_op ||
     861-                     ip->r_format.func == jr_op)))
     862-                       break;
     863 
     864-               if (info->func_size && i >= info->func_size / 4)
     865-                       break;
     866-               if (
     867-#ifdef CONFIG_32BIT
     868-                   ip->i_format.opcode == addiu_op &&
     869-#endif
     870-#ifdef CONFIG_64BIT
     871-                   ip->i_format.opcode == daddiu_op &&
     872-#endif
     873-                   ip->i_format.rs == 29 &&
     874-                   ip->i_format.rt == 29) {
     875-                       /* addiu/daddiu sp,sp,-imm */
     876-                       if (info->frame_size)
     877-                               continue;
     878-                       info->frame_size = - ip->i_format.simmediate;
     879-               }
     880+       for (i = 0; i < max_insns; i++, ip++) {
     881 
     882-               if (
     883-#ifdef CONFIG_32BIT
     884-                   ip->i_format.opcode == sw_op &&
     885-#endif
     886-#ifdef CONFIG_64BIT
     887-                   ip->i_format.opcode == sd_op &&
     888-#endif
     889-                   ip->i_format.rs == 29 &&
     890-                   ip->i_format.rt == 31) {
     891-                       /* sw / sd $ra, offset($sp) */
     892-                       if (info->pc_offset != -1)
     893-                               continue;
     894+               if (is_jal_jalr_jr_ins(ip))
     895+                       break;
     896+               if (!info->frame_size) {
     897+                       if (is_sp_move_ins(ip))
     898+                               info->frame_size = - ip->i_format.simmediate;
     899+                       continue;
     900+               }
     901+               if (info->pc_offset == -1 && is_ra_save_ins(ip)) {
     902                        info->pc_offset =
     903                                ip->i_format.simmediate / sizeof(long);
     904+                       break;
     905                }
     906        }
     907-       if (info->pc_offset == -1 || info->frame_size == 0) {
     908-               if (func == schedule)
     909-                       printk("Can't analyze prologue code at %p\n", func);
     910-               info->pc_offset = -1;
     911-               info->frame_size = 0;
     912-       }
     913-
     914-       return 0;
     915+       if (info->frame_size && info->pc_offset >= 0) /* nested */
     916+               return 0;
     917+       if (info->pc_offset < 0) /* leaf */
     918+               return 1;
     919+       /* prologue seems boggus... */
     920+       return -1;
     921 }
     922 
     923 static int __init frame_info_init(void)
     924@@ -368,7 +369,14 @@
     925        schedule_frame = &mfinfo[0];
     926 #endif
     927        for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++)
     928-               get_frame_info(&mfinfo[i]);
     929+               get_frame_info(mfinfo + i);
     930+
     931+       /*
     932+        * Without schedule() frame info, result given by
     933+        * thread_saved_pc() and get_wchan() are not reliable.
     934+        */
     935+       if (schedule_frame->pc_offset < 0)
     936+               printk("Can't analyze schedule() prologue at %p\n", schedule);
     937 
     938        mfinfo_num = i;
    940939        return 0;
     940@@ -427,6 +435,8 @@
     941                if (i < 0)
     942                        break;
     943 
     944+               if (mfinfo[i].pc_offset < 0)
     945+                       break;
     946                pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
     947                if (!mfinfo[i].frame_size)
     948                        break;
     949@@ -437,3 +447,49 @@
     950        return pc;
    941951 }
    942 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/ptrace.c linux-2.6.17.13/arch/mips/kernel/ptrace.c
    943 --- linux-2.6.17.13.orig/arch/mips/kernel/ptrace.c      2006-09-08 20:23:25.000000000 -0700
    944 +++ linux-2.6.17.13/arch/mips/kernel/ptrace.c   2006-09-09 10:17:04.000000000 -0700
    945 @@ -21,12 +21,12 @@
     952 
     953+#ifdef CONFIG_KALLSYMS
     954+/* used by show_backtrace() */
     955+unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
     956+                          unsigned long pc, unsigned long ra)
     957+{
     958+       unsigned long stack_page;
     959+       struct mips_frame_info info;
     960+       char *modname;
     961+       char namebuf[KSYM_NAME_LEN + 1];
     962+       unsigned long size, ofs;
     963+       int leaf;
     964+
     965+       stack_page = (unsigned long)task_stack_page(task);
     966+       if (!stack_page)
     967+               return 0;
     968+
     969+       if (!kallsyms_lookup(pc, &size, &ofs, &modname, namebuf))
     970+               return 0;
     971+       if (ofs == 0)
     972+               return 0;
     973+
     974+       info.func = (void *)(pc - ofs);
     975+       info.func_size = ofs;   /* analyze from start to ofs */
     976+       leaf = get_frame_info(&info);
     977+       if (leaf < 0)
     978+               return 0;
     979+
     980+       if (*sp < stack_page ||
     981+           *sp + info.frame_size > stack_page + THREAD_SIZE - 32)
     982+               return 0;
     983+
     984+       if (leaf)
     985+               /*
     986+                * For some extreme cases, get_frame_info() can
     987+                * consider wrongly a nested function as a leaf
     988+                * one. In that cases avoid to return always the
     989+                * same value.
     990+                */
     991+               pc = pc != ra ? ra : 0;
     992+       else
     993+               pc = ((unsigned long *)(*sp))[info.pc_offset];
     994+
     995+       *sp += info.frame_size;
     996+       return __kernel_text_address(pc) ? pc : 0;
     997+}
     998+#endif
     999diff -Naur linux-2.6.18/arch/mips/kernel/ptrace.c linux-2.6.18.mips/arch/mips/kernel/ptrace.c
     1000--- linux-2.6.18/arch/mips/kernel/ptrace.c      2006-09-19 20:42:06.000000000 -0700
     1001+++ linux-2.6.18.mips/arch/mips/kernel/ptrace.c 2006-09-20 06:55:21.000000000 -0700
     1002@@ -20,12 +20,12 @@
    9461003 #include <linux/mm.h>
    9471004 #include <linux/errno.h>
     
    9581015 #include <asm/byteorder.h>
    9591016 #include <asm/cpu.h>
    960 @@ -482,12 +482,16 @@
     1017@@ -471,12 +471,16 @@
    9611018  */
    9621019 asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
     
    9751032                goto out;
    9761033 
    977 @@ -505,9 +509,14 @@
     1034@@ -494,9 +498,14 @@
    9781035                send_sig(current->exit_code, current, 1);
    9791036                current->exit_code = 0;
     
    9941051+                                   regs->regs[6], regs->regs[7]);
    9951052 }
    996 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/r4k_switch.S linux-2.6.17.13/arch/mips/kernel/r4k_switch.S
    997 --- linux-2.6.17.13.orig/arch/mips/kernel/r4k_switch.S  2006-09-08 20:23:25.000000000 -0700
    998 +++ linux-2.6.17.13/arch/mips/kernel/r4k_switch.S       2006-09-09 10:17:04.000000000 -0700
    999 @@ -75,8 +75,8 @@
    1000         and     t0, t0, t1
    1001         LONG_S  t0, ST_OFF(t3)
    1002  
    1003 -       fpu_save_double a0 t1 t0 t2             # c0_status passed in t1
    1004 -                                               # clobbers t0 and t2
    1005 +       fpu_save_double a0 t0 t1                # c0_status passed in t0
    1006 +                                               # clobbers t1
    1007  1:
    1008  
    1009         /*
    1010 @@ -94,7 +94,7 @@
    1011         ori     t1, t2, TCSTATUS_IXMT
    1012         mtc0    t1, CP0_TCSTATUS
    1013         andi    t2, t2, TCSTATUS_IXMT
    1014 -       ehb
    1015 +       _ehb
    1016         DMT     8                               # dmt   t0
    1017         move    t1,ra
    1018         jal     mips_ihb
    1019 @@ -109,7 +109,7 @@
    1020         or      a2, t1
    1021         mtc0    a2, CP0_STATUS
    1022  #ifdef CONFIG_MIPS_MT_SMTC
    1023 -       ehb
    1024 +       _ehb
    1025         andi    t0, t0, VPECONTROL_TE
    1026         beqz    t0, 1f
    1027         emt
    1028 @@ -118,7 +118,7 @@
    1029         xori    t1, t1, TCSTATUS_IXMT
    1030         or      t1, t1, t2
    1031         mtc0    t1, CP0_TCSTATUS
    1032 -       ehb
    1033 +       _ehb
    1034  #endif /* CONFIG_MIPS_MT_SMTC */
    1035         move    v0, a0
    1036         jr      ra
    1037 @@ -129,9 +129,9 @@
    1038   */
    1039  LEAF(_save_fp)
    1040  #ifdef CONFIG_64BIT
    1041 -       mfc0    t1, CP0_STATUS
    1042 +       mfc0    t0, CP0_STATUS
    1043  #endif
    1044 -       fpu_save_double a0 t1 t0 t2             # clobbers t1
    1045 +       fpu_save_double a0 t0 t1                # clobbers t1
    1046         jr      ra
    1047         END(_save_fp)
    1048  
    1049 @@ -139,7 +139,10 @@
    1050   * Restore a thread's fp context.
    1051   */
    1052  LEAF(_restore_fp)
    1053 -       fpu_restore_double a0, t1               # clobbers t1
    1054 +#ifdef CONFIG_64BIT
    1055 +       mfc0    t0, CP0_STATUS
    1056 +#endif
    1057 +       fpu_restore_double a0 t0 t1             # clobbers t1
    1058         jr      ra
    1059         END(_restore_fp)
    1060  
    1061 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/scall32-o32.S linux-2.6.17.13/arch/mips/kernel/scall32-o32.S
    1062 --- linux-2.6.17.13.orig/arch/mips/kernel/scall32-o32.S 2006-09-08 20:23:25.000000000 -0700
    1063 +++ linux-2.6.17.13/arch/mips/kernel/scall32-o32.S      2006-09-09 10:17:04.000000000 -0700
    1064 @@ -497,7 +497,7 @@
    1065         sys     sys_sched_get_priority_min 1
    1066         sys     sys_sched_rr_get_interval 2     /* 4165 */
    1067         sys     sys_nanosleep,          2
    1068 -       sys     sys_mremap,             4
    1069 +       sys     sys_mremap,             5
    1070         sys     sys_accept              3
    1071         sys     sys_bind                3
    1072         sys     sys_connect             3       /* 4170 */
    1073 @@ -647,6 +647,11 @@
    1074         sys     sys_unshare             1
    1075         sys     sys_splice              4
    1076         sys     sys_sync_file_range     7       /* 4305 */
    1077 +       sys     sys_tee                 4
    1078 +       sys     sys_vmsplice            4
    1079 +       sys     sys_ni_syscall          0
     1053diff -Naur linux-2.6.18/arch/mips/kernel/scall32-o32.S linux-2.6.18.mips/arch/mips/kernel/scall32-o32.S
     1054--- linux-2.6.18/arch/mips/kernel/scall32-o32.S 2006-09-19 20:42:06.000000000 -0700
     1055+++ linux-2.6.18.mips/arch/mips/kernel/scall32-o32.S    2006-09-20 06:55:21.000000000 -0700
     1056@@ -662,6 +662,8 @@
     1057        sys     sys_tee                 4
     1058        sys     sys_vmsplice            4
     1059        sys     sys_move_pages          6
    10801060+       sys     sys_set_robust_list     2
    10811061+       sys     sys_get_robust_list     3
     
    10831063 
    10841064        /* We pre-compute the number of _instruction_ bytes needed to
    1085 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/scall64-64.S linux-2.6.17.13/arch/mips/kernel/scall64-64.S
    1086 --- linux-2.6.17.13.orig/arch/mips/kernel/scall64-64.S  2006-09-08 20:23:25.000000000 -0700
    1087 +++ linux-2.6.17.13/arch/mips/kernel/scall64-64.S       2006-09-09 10:17:04.000000000 -0700
    1088 @@ -462,3 +462,8 @@
    1089         PTR     sys_unshare
     1065diff -Naur linux-2.6.18/arch/mips/kernel/scall64-64.S linux-2.6.18.mips/arch/mips/kernel/scall64-64.S
     1066--- linux-2.6.18/arch/mips/kernel/scall64-64.S  2006-09-19 20:42:06.000000000 -0700
     1067+++ linux-2.6.18.mips/arch/mips/kernel/scall64-64.S     2006-09-20 06:55:21.000000000 -0700
     1068@@ -466,3 +466,5 @@
     1069        PTR     sys_tee                         /* 5265 */
     1070        PTR     sys_vmsplice
     1071        PTR     sys_move_pages
     1072+       PTR     sys_set_robust_list
     1073+       PTR     sys_get_robust_list
     1074diff -Naur linux-2.6.18/arch/mips/kernel/scall64-n32.S linux-2.6.18.mips/arch/mips/kernel/scall64-n32.S
     1075--- linux-2.6.18/arch/mips/kernel/scall64-n32.S 2006-09-19 20:42:06.000000000 -0700
     1076+++ linux-2.6.18.mips/arch/mips/kernel/scall64-n32.S    2006-09-20 06:55:21.000000000 -0700
     1077@@ -247,7 +247,7 @@
     1078        PTR     sys_capset
     1079        PTR     sys32_rt_sigpending             /* 6125 */
     1080        PTR     compat_sys_rt_sigtimedwait
     1081-       PTR     sys_rt_sigqueueinfo
     1082+       PTR     sys32_rt_sigqueueinfo
     1083        PTR     sysn32_rt_sigsuspend
     1084        PTR     sys32_sigaltstack
     1085        PTR     compat_sys_utime                /* 6130 */
     1086@@ -390,5 +390,7 @@
    10901087        PTR     sys_splice
    10911088        PTR     sys_sync_file_range
    1092 +       PTR     sys_tee                         /* 5265 */
    1093 +       PTR     sys_vmsplice
    1094 +       PTR     sys_ni_syscall
    1095 +       PTR     sys_set_robust_list
    1096 +       PTR     sys_get_robust_list
    1097 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/scall64-n32.S linux-2.6.17.13/arch/mips/kernel/scall64-n32.S
    1098 --- linux-2.6.17.13.orig/arch/mips/kernel/scall64-n32.S 2006-09-08 20:23:25.000000000 -0700
    1099 +++ linux-2.6.17.13/arch/mips/kernel/scall64-n32.S      2006-09-09 10:17:04.000000000 -0700
    1100 @@ -388,3 +388,8 @@
    1101         PTR     sys_unshare
    1102         PTR     sys_splice
    1103         PTR     sys_sync_file_range
    1104 +       PTR     sys_tee
     1089        PTR     sys_tee
     1090-       PTR     sys_vmsplice                    /* 6271 */
    11051091+       PTR     sys_vmsplice                    /* 6270 */
    1106 +       PTR     sys_ni_syscall
     1092        PTR     sys_move_pages
    11071093+       PTR     compat_sys_set_robust_list
    11081094+       PTR     compat_sys_get_robust_list
    1109 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/scall64-o32.S linux-2.6.17.13/arch/mips/kernel/scall64-o32.S
    1110 --- linux-2.6.17.13.orig/arch/mips/kernel/scall64-o32.S 2006-09-08 20:23:25.000000000 -0700
    1111 +++ linux-2.6.17.13/arch/mips/kernel/scall64-o32.S      2006-09-09 10:17:04.000000000 -0700
    1112 @@ -510,4 +510,9 @@
    1113         PTR     sys_unshare
    1114         PTR     sys_splice
    1115         PTR     sys32_sync_file_range           /* 4305 */
    1116 +       PTR     sys_tee
    1117 +       PTR     sys_vmsplice
    1118 +       PTR     sys_ni_syscall
     1095diff -Naur linux-2.6.18/arch/mips/kernel/scall64-o32.S linux-2.6.18.mips/arch/mips/kernel/scall64-o32.S
     1096--- linux-2.6.18/arch/mips/kernel/scall64-o32.S 2006-09-19 20:42:06.000000000 -0700
     1097+++ linux-2.6.18.mips/arch/mips/kernel/scall64-o32.S    2006-09-20 06:55:21.000000000 -0700
     1098@@ -514,4 +514,6 @@
     1099        PTR     sys_tee
     1100        PTR     sys_vmsplice
     1101        PTR     compat_sys_move_pages
    11191102+       PTR     compat_sys_set_robust_list
    11201103+       PTR     compat_sys_get_robust_list      /* 4310 */
    11211104        .size   sys_call_table,.-sys_call_table
    1122 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/signal32.c linux-2.6.17.13/arch/mips/kernel/signal32.c
    1123 --- linux-2.6.17.13.orig/arch/mips/kernel/signal32.c    2006-09-08 20:23:25.000000000 -0700
    1124 +++ linux-2.6.17.13/arch/mips/kernel/signal32.c 2006-09-09 10:17:04.000000000 -0700
     1105diff -Naur linux-2.6.18/arch/mips/kernel/signal32.c linux-2.6.18.mips/arch/mips/kernel/signal32.c
     1106--- linux-2.6.18/arch/mips/kernel/signal32.c    2006-09-19 20:42:06.000000000 -0700
     1107+++ linux-2.6.18.mips/arch/mips/kernel/signal32.c       2006-09-20 06:55:21.000000000 -0700
    11251108@@ -815,9 +815,6 @@
    11261109        if (!user_mode(regs))
     
    11531136 
    11541137        /*
    1155 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/signal.c linux-2.6.17.13/arch/mips/kernel/signal.c
    1156 --- linux-2.6.17.13.orig/arch/mips/kernel/signal.c      2006-09-08 20:23:25.000000000 -0700
    1157 +++ linux-2.6.17.13/arch/mips/kernel/signal.c   2006-09-09 10:17:04.000000000 -0700
    1158 @@ -425,15 +425,11 @@
     1138diff -Naur linux-2.6.18/arch/mips/kernel/signal.c linux-2.6.18.mips/arch/mips/kernel/signal.c
     1139--- linux-2.6.18/arch/mips/kernel/signal.c      2006-09-19 20:42:06.000000000 -0700
     1140+++ linux-2.6.18.mips/arch/mips/kernel/signal.c 2006-09-20 06:55:21.000000000 -0700
     1141@@ -424,15 +424,11 @@
    11591142        if (!user_mode(regs))
    11601143                return;
     
    11721155        if (signr > 0) {
    11731156                /* Whee!  Actually deliver the signal.  */
    1174 @@ -447,9 +443,10 @@
     1157@@ -446,9 +442,10 @@
    11751158                        if (test_thread_flag(TIF_RESTORE_SIGMASK))
    11761159                                clear_thread_flag(TIF_RESTORE_SIGMASK);
     
    11841167         * Who's code doesn't conform to the restartable syscall convention
    11851168         * dies here!!!  The li instruction, a single machine instruction,
    1186 @@ -467,6 +464,7 @@
     1169@@ -466,6 +463,7 @@
    11871170                        regs->regs[7] = regs->regs[26];
    11881171                        regs->cp0_epc -= 4;
     
    11921175 
    11931176        /*
    1194 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/smp.c linux-2.6.17.13/arch/mips/kernel/smp.c
    1195 --- linux-2.6.17.13.orig/arch/mips/kernel/smp.c 2006-09-08 20:23:25.000000000 -0700
    1196 +++ linux-2.6.17.13/arch/mips/kernel/smp.c      2006-09-09 10:17:04.000000000 -0700
    1197 @@ -336,7 +336,7 @@
    1198         preempt_disable();
    1199  
    1200         if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
    1201 -               smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1);
    1202 +               __on_other_cores(flush_tlb_mm_ipi, (void *)mm);
    1203         } else {
    1204                 int i;
    1205                 for (i = 0; i < num_online_cpus(); i++)
    1206 @@ -372,7 +372,7 @@
    1207                 fd.vma = vma;
    1208                 fd.addr1 = start;
    1209                 fd.addr2 = end;
    1210 -               smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1);
    1211 +               __on_other_cores(flush_tlb_range_ipi, (void *)&fd);
    1212         } else {
    1213                 int i;
    1214                 for (i = 0; i < num_online_cpus(); i++)
    1215 @@ -414,7 +414,7 @@
    1216  
    1217                 fd.vma = vma;
    1218                 fd.addr1 = page;
    1219 -               smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1);
    1220 +               __on_other_cores(flush_tlb_page_ipi, (void *)&fd);
    1221         } else {
    1222                 int i;
    1223                 for (i = 0; i < num_online_cpus(); i++)
    1224 @@ -434,8 +434,7 @@
    1225  
    1226  void flush_tlb_one(unsigned long vaddr)
     1177diff -Naur linux-2.6.18/arch/mips/kernel/smp.c linux-2.6.18.mips/arch/mips/kernel/smp.c
     1178--- linux-2.6.18/arch/mips/kernel/smp.c 2006-09-19 20:42:06.000000000 -0700
     1179+++ linux-2.6.18.mips/arch/mips/kernel/smp.c    2006-09-20 06:55:21.000000000 -0700
     1180@@ -467,14 +467,18 @@
     1181 
     1182 static int __init topology_init(void)
    12271183 {
    1228 -       smp_call_function(flush_tlb_one_ipi, (void *) vaddr, 1, 1);
    1229 -       local_flush_tlb_one(vaddr);
    1230 +       __on_each_core(flush_tlb_one_ipi, (void *) vaddr);
    1231  }
    1232  
    1233  static DEFINE_PER_CPU(struct cpu, cpu_devices);
    1234 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/smp-mt.c linux-2.6.17.13/arch/mips/kernel/smp-mt.c
    1235 --- linux-2.6.17.13.orig/arch/mips/kernel/smp-mt.c      2006-09-08 20:23:25.000000000 -0700
    1236 +++ linux-2.6.17.13/arch/mips/kernel/smp-mt.c   2006-09-09 10:17:04.000000000 -0700
     1184-       int cpu;
     1185-       int ret;
     1186+       int i, ret;
     1187 
     1188-       for_each_present_cpu(cpu) {
     1189-               ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu);
     1190+#ifdef CONFIG_NUMA
     1191+       for_each_online_node(i)
     1192+               register_one_node(i);
     1193+#endif /* CONFIG_NUMA */
     1194+
     1195+       for_each_present_cpu(i) {
     1196+               ret = register_cpu(&per_cpu(cpu_devices, i), i);
     1197                if (ret)
     1198                        printk(KERN_WARNING "topology_init: register_cpu %d "
     1199-                              "failed (%d)\n", cpu, ret);
     1200+                              "failed (%d)\n", i, ret);
     1201        }
     1202 
     1203        return 0;
     1204diff -Naur linux-2.6.18/arch/mips/kernel/smp-mt.c linux-2.6.18.mips/arch/mips/kernel/smp-mt.c
     1205--- linux-2.6.18/arch/mips/kernel/smp-mt.c      2006-09-19 20:42:06.000000000 -0700
     1206+++ linux-2.6.18.mips/arch/mips/kernel/smp-mt.c 2006-09-20 06:55:21.000000000 -0700
    12371207@@ -203,7 +203,7 @@
    12381208                                write_vpe_c0_config( read_c0_config());
     
    12441214                                /* Propagate Config7 */
    12451215                                write_vpe_c0_config7(read_c0_config7());
    1246 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/smtc-asm.S linux-2.6.17.13/arch/mips/kernel/smtc-asm.S
    1247 --- linux-2.6.17.13.orig/arch/mips/kernel/smtc-asm.S    2006-09-08 20:23:25.000000000 -0700
    1248 +++ linux-2.6.17.13/arch/mips/kernel/smtc-asm.S 2006-09-09 10:17:04.000000000 -0700
    1249 @@ -52,12 +52,12 @@
    1250         .set    noat
    1251         /* Disable thread scheduling to make Status update atomic */
    1252         DMT     27                                      # dmt   k1
    1253 -       ehb
    1254 +       _ehb
    1255         /* Set EXL */
    1256         mfc0    k0,CP0_STATUS
    1257         ori     k0,k0,ST0_EXL
    1258         mtc0    k0,CP0_STATUS
    1259 -       ehb
    1260 +       _ehb
    1261         /* Thread scheduling now inhibited by EXL. Restore TE state. */
    1262         andi    k1,k1,VPECONTROL_TE
    1263         beqz    k1,1f
    1264 @@ -82,7 +82,7 @@
    1265         li      k1,ST0_CU0
    1266         or      k1,k1,k0
    1267         mtc0    k1,CP0_STATUS
    1268 -       ehb
    1269 +       _ehb
    1270         get_saved_sp
    1271         /* Interrupting TC will have pre-set values in slots in the new frame */
    1272  2:     subu    k1,k1,PT_SIZE
    1273 @@ -90,7 +90,7 @@
    1274         lw      k0,PT_TCSTATUS(k1)
    1275         /* Write it to TCStatus to restore CU/KSU/IXMT state */
    1276         mtc0    k0,$2,1
    1277 -       ehb
    1278 +       _ehb
    1279         lw      k0,PT_EPC(k1)
    1280         mtc0    k0,CP0_EPC
    1281         /* Save all will redundantly recompute the SP, but use it for now */
    1282 @@ -116,7 +116,7 @@
    1283         mfc0    t0,CP0_TCSTATUS
    1284         ori     t1,t0,TCSTATUS_IXMT
    1285         mtc0    t1,CP0_TCSTATUS
    1286 -       ehb
    1287 +       _ehb
    1288         /* We know we're in kernel mode, so prepare stack frame */
    1289         subu    t1,sp,PT_SIZE
    1290         sw      ra,PT_EPC(t1)
    1291 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/syscall.c linux-2.6.17.13/arch/mips/kernel/syscall.c
    1292 --- linux-2.6.17.13.orig/arch/mips/kernel/syscall.c     2006-09-08 20:23:25.000000000 -0700
    1293 +++ linux-2.6.17.13/arch/mips/kernel/syscall.c  2006-09-09 10:17:04.000000000 -0700
    1294 @@ -117,6 +117,22 @@
     1216diff -Naur linux-2.6.18/arch/mips/kernel/smtc-asm.S linux-2.6.18.mips/arch/mips/kernel/smtc-asm.S
     1217--- linux-2.6.18/arch/mips/kernel/smtc-asm.S    2006-09-19 20:42:06.000000000 -0700
     1218+++ linux-2.6.18.mips/arch/mips/kernel/smtc-asm.S       2006-09-20 06:55:21.000000000 -0700
     1219@@ -8,7 +8,7 @@
     1220 #include <asm/regdef.h>
     1221 #include <asm/asmmacro.h>
     1222 #include <asm/stackframe.h>
     1223-#include <asm/stackframe.h>
     1224+#include <asm/irqflags.h>
     1225 
     1226 /*
     1227  * "Software Interrupt" linkage.
     1228diff -Naur linux-2.6.18/arch/mips/kernel/syscall.c linux-2.6.18.mips/arch/mips/kernel/syscall.c
     1229--- linux-2.6.18/arch/mips/kernel/syscall.c     2006-09-19 20:42:06.000000000 -0700
     1230+++ linux-2.6.18.mips/arch/mips/kernel/syscall.c        2006-09-20 06:55:21.000000000 -0700
     1231@@ -263,7 +263,7 @@
     1232        return error;
     1233 }
     1234 
     1235-void sys_set_thread_area(unsigned long addr)
     1236+asmlinkage int sys_set_thread_area(unsigned long addr)
     1237 {
     1238        struct thread_info *ti = task_thread_info(current);
     1239 
     1240@@ -271,6 +271,8 @@
     1241 
     1242        /* If some future MIPS implementation has this register in hardware,
     1243         * we will need to update it here (and in context switches).  */
     1244+
     1245+       return 0;
     1246 }
     1247 
     1248 asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
     1249diff -Naur linux-2.6.18/arch/mips/kernel/traps.c linux-2.6.18.mips/arch/mips/kernel/traps.c
     1250--- linux-2.6.18/arch/mips/kernel/traps.c       2006-09-19 20:42:06.000000000 -0700
     1251+++ linux-2.6.18.mips/arch/mips/kernel/traps.c  2006-09-20 06:55:21.000000000 -0700
     1252@@ -20,6 +20,7 @@
     1253 #include <linux/spinlock.h>
     1254 #include <linux/kallsyms.h>
     1255 #include <linux/bootmem.h>
     1256+#include <linux/interrupt.h>
     1257 
     1258 #include <asm/bootinfo.h>
     1259 #include <asm/branch.h>
     1260@@ -72,28 +73,68 @@
     1261 void (*board_ejtag_handler_setup)(void);
     1262 void (*board_bind_eic_interrupt)(int irq, int regset);
     1263 
     1264-/*
     1265- * These constant is for searching for possible module text segments.
     1266- * MODULE_RANGE is a guess of how much space is likely to be vmalloced.
     1267- */
     1268-#define MODULE_RANGE (8*1024*1024)
     1269+
     1270+static void show_raw_backtrace(unsigned long reg29)
     1271+{
     1272+       unsigned long *sp = (unsigned long *)reg29;
     1273+       unsigned long addr;
     1274+
     1275+       printk("Call Trace:");
     1276+#ifdef CONFIG_KALLSYMS
     1277+       printk("\n");
     1278+#endif
     1279+       while (!kstack_end(sp)) {
     1280+               addr = *sp++;
     1281+               if (__kernel_text_address(addr))
     1282+                       print_ip_sym(addr);
     1283+       }
     1284+       printk("\n");
     1285+}
     1286+
     1287+#ifdef CONFIG_KALLSYMS
     1288+static int raw_show_trace;
     1289+static int __init set_raw_show_trace(char *str)
     1290+{
     1291+       raw_show_trace = 1;
     1292+       return 1;
     1293+}
     1294+__setup("raw_show_trace", set_raw_show_trace);
     1295+
     1296+extern unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
     1297+                                 unsigned long pc, unsigned long ra);
     1298+
     1299+static void show_backtrace(struct task_struct *task, struct pt_regs *regs)
     1300+{
     1301+       unsigned long sp = regs->regs[29];
     1302+       unsigned long ra = regs->regs[31];
     1303+       unsigned long pc = regs->cp0_epc;
     1304+
     1305+       if (raw_show_trace || !__kernel_text_address(pc)) {
     1306+               show_raw_backtrace(sp);
     1307+               return;
     1308+       }
     1309+       printk("Call Trace:\n");
     1310+       do {
     1311+               print_ip_sym(pc);
     1312+               pc = unwind_stack(task, &sp, pc, ra);
     1313+               ra = 0;
     1314+       } while (pc);
     1315+       printk("\n");
     1316+}
     1317+#else
     1318+#define show_backtrace(task, r) show_raw_backtrace((r)->regs[29]);
     1319+#endif
     1320 
     1321 /*
     1322  * This routine abuses get_user()/put_user() to reference pointers
     1323  * with at least a bit of error checking ...
     1324  */
     1325-void show_stack(struct task_struct *task, unsigned long *sp)
     1326+static void show_stacktrace(struct task_struct *task, struct pt_regs *regs)
     1327 {
     1328        const int field = 2 * sizeof(unsigned long);
     1329        long stackdata;
     1330        int i;
     1331-
     1332-       if (!sp) {
     1333-               if (task && task != current)
     1334-                       sp = (unsigned long *) task->thread.reg29;
     1335-               else
     1336-                       sp = (unsigned long *) &sp;
     1337-       }
     1338+       unsigned long *sp = (unsigned long *)regs->regs[29];
     1339 
     1340        printk("Stack :");
     1341        i = 0;
     1342@@ -114,32 +155,48 @@
     1343                i++;
    12951344        }
     1345        printk("\n");
     1346+       show_backtrace(task, regs);
    12961347 }
    12971348 
    1298 +int mips_mmap_check(unsigned long addr, unsigned long len,
    1299 +       unsigned long flags)
    1300 +{
    1301 +#ifdef CONFIG_MIPS32_COMPAT
    1302 +       if (current->thread.mflags & MF_32BIT_ADDR) {
    1303 +               if (len > TASK_SIZE32)
    1304 +                       return -EINVAL;
    1305 +               if (flags & MAP_FIXED &&
    1306 +                   (addr >= TASK_SIZE32 || addr + len >= TASK_SIZE32))
    1307 +                       return -EINVAL;
    1308 +       }
    1309 +#endif
    1310 +
    1311 +       return 0;
    1312 +}
    1313 +
    1314  /* common code for old and new mmaps */
    1315  static inline unsigned long
    1316  do_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
    1317 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/traps.c linux-2.6.17.13/arch/mips/kernel/traps.c
    1318 --- linux-2.6.17.13.orig/arch/mips/kernel/traps.c       2006-09-08 20:23:25.000000000 -0700
    1319 +++ linux-2.6.17.13/arch/mips/kernel/traps.c    2006-09-09 10:17:04.000000000 -0700
    1320 @@ -1051,7 +1051,7 @@
    1321         return (void *)old_handler;
     1349-void show_trace(struct task_struct *task, unsigned long *stack)
     1350+static __always_inline void prepare_frametrace(struct pt_regs *regs)
     1351 {
     1352-       const int field = 2 * sizeof(unsigned long);
     1353-       unsigned long addr;
     1354-
     1355-       if (!stack) {
     1356-               if (task && task != current)
     1357-                       stack = (unsigned long *) task->thread.reg29;
     1358-               else
     1359-                       stack = (unsigned long *) &stack;
     1360-       }
     1361-
     1362-       printk("Call Trace:");
     1363-#ifdef CONFIG_KALLSYMS
     1364-       printk("\n");
     1365+       __asm__ __volatile__(
     1366+               ".set push\n\t"
     1367+               ".set noat\n\t"
     1368+#ifdef CONFIG_64BIT
     1369+               "1: dla $1, 1b\n\t"
     1370+               "sd $1, %0\n\t"
     1371+               "sd $29, %1\n\t"
     1372+               "sd $31, %2\n\t"
     1373+#else
     1374+               "1: la $1, 1b\n\t"
     1375+               "sw $1, %0\n\t"
     1376+               "sw $29, %1\n\t"
     1377+               "sw $31, %2\n\t"
     1378 #endif
     1379-       while (!kstack_end(stack)) {
     1380-               addr = *stack++;
     1381-               if (__kernel_text_address(addr)) {
     1382-                       printk(" [<%0*lx>] ", field, addr);
     1383-                       print_symbol("%s\n", addr);
     1384+               ".set pop\n\t"
     1385+               : "=m" (regs->cp0_epc),
     1386+               "=m" (regs->regs[29]), "=m" (regs->regs[31])
     1387+               : : "memory");
     1388+}
     1389+
     1390+void show_stack(struct task_struct *task, unsigned long *sp)
     1391+{
     1392+       struct pt_regs regs;
     1393+       if (sp) {
     1394+               regs.regs[29] = (unsigned long)sp;
     1395+               regs.regs[31] = 0;
     1396+               regs.cp0_epc = 0;
     1397+       } else {
     1398+               if (task && task != current) {
     1399+                       regs.regs[29] = task->thread.reg29;
     1400+                       regs.regs[31] = 0;
     1401+                       regs.cp0_epc = task->thread.reg31;
     1402+               } else {
     1403+                       prepare_frametrace(&regs);
     1404                }
     1405        }
     1406-       printk("\n");
     1407+       show_stacktrace(task, &regs);
    13221408 }
    13231409 
    1324 -#ifdef CONFIG_CPU_MIPSR2
    1325 +#ifdef CONFIG_CPU_MIPSR2_SRS
    13261410 /*
    1327   * MIPSR2 shadow register set allocation
    1328   * FIXME: SMP...
    1329 @@ -1070,11 +1070,9 @@
    1330  
    1331  static void mips_srs_init(void)
     1411@@ -147,9 +204,15 @@
     1412  */
     1413 void dump_stack(void)
    13321414 {
    1333 -#ifdef CONFIG_CPU_MIPSR2_SRS
    1334         shadow_registers.sr_supported = ((read_c0_srsctl() >> 26) & 0x0f) + 1;
    1335         printk(KERN_INFO "%d MIPSR2 register sets available\n",
    1336                shadow_registers.sr_supported);
    1337 -#endif
    1338         shadow_registers.sr_allocated = 1;      /* Set 0 used by kernel */
     1415-       unsigned long stack;
     1416+       struct pt_regs regs;
     1417 
     1418-       show_trace(current, &stack);
     1419+       /*
     1420+        * Remove any garbage that may be in regs (specially func
     1421+        * addresses) to avoid show_raw_backtrace() to report them
     1422+        */
     1423+       memset(&regs, 0, sizeof(regs));
     1424+       prepare_frametrace(&regs);
     1425+       show_backtrace(current, &regs);
    13391426 }
    13401427 
    1341 @@ -1199,7 +1197,14 @@
    1342  {
    1343         return set_vi_srs_handler(n, addr, 0);
     1428 EXPORT_SYMBOL(dump_stack);
     1429@@ -268,8 +331,7 @@
     1430        print_modules();
     1431        printk("Process %s (pid: %d, threadinfo=%p, task=%p)\n",
     1432                current->comm, current->pid, current_thread_info(), current);
     1433-       show_stack(current, (long *) regs->regs[29]);
     1434-       show_trace(current, (long *) regs->regs[29]);
     1435+       show_stacktrace(current, regs);
     1436        show_code((unsigned int *) regs->cp0_epc);
     1437        printk("\n");
    13441438 }
    1345 -#endif
    1346 +
    1347 +#else
    1348 +
    1349 +static inline void mips_srs_init(void)
    1350 +{
    1351 +}
    1352 +
    1353 +#endif /* CONFIG_CPU_MIPSR2_SRS */
    1354  
    1355  /*
    1356   * This is used by native signal handling
    1357 @@ -1389,9 +1394,7 @@
    1358         else
    1359                 ebase = CAC_BASE;
    1360  
    1361 -#ifdef CONFIG_CPU_MIPSR2
    1362         mips_srs_init();
    1363 -#endif
    1364  
    1365         per_cpu_trap_init();
    1366  
    1367 diff -Naur linux-2.6.17.13.orig/arch/mips/kernel/vpe.c linux-2.6.17.13/arch/mips/kernel/vpe.c
    1368 --- linux-2.6.17.13.orig/arch/mips/kernel/vpe.c 2006-09-08 20:23:25.000000000 -0700
    1369 +++ linux-2.6.17.13/arch/mips/kernel/vpe.c      2006-09-09 10:17:04.000000000 -0700
    1370 @@ -769,10 +769,16 @@
     1439@@ -292,6 +354,16 @@
     1440        printk("%s[#%d]:\n", str, ++die_counter);
     1441        show_registers(regs);
     1442        spin_unlock_irq(&die_lock);
     1443+
     1444+       if (in_interrupt())
     1445+               panic("Fatal exception in interrupt");
     1446+
     1447+       if (panic_on_oops) {
     1448+               printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
     1449+               ssleep(5);
     1450+               panic("Fatal exception");
     1451+       }
     1452+
     1453        do_exit(SIGSEGV);
     1454 }
     1455 
     1456diff -Naur linux-2.6.18/arch/mips/kernel/vpe.c linux-2.6.18.mips/arch/mips/kernel/vpe.c
     1457--- linux-2.6.18/arch/mips/kernel/vpe.c 2006-09-19 20:42:06.000000000 -0700
     1458+++ linux-2.6.18.mips/arch/mips/kernel/vpe.c    2006-09-20 06:55:21.000000000 -0700
     1459@@ -768,10 +768,16 @@
    13711460         */
    13721461        write_tc_c0_tcbind((read_tc_c0_tcbind() & ~TCBIND_CURVPE) | v->minor);
     
    13851474         write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() | VPECONF0_VPA);
    13861475 
    1387 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/ashldi3.c linux-2.6.17.13/arch/mips/lib/ashldi3.c
    1388 --- linux-2.6.17.13.orig/arch/mips/lib/ashldi3.c        1969-12-31 16:00:00.000000000 -0800
    1389 +++ linux-2.6.17.13/arch/mips/lib/ashldi3.c     2006-09-09 10:17:04.000000000 -0700
    1390 @@ -0,0 +1,29 @@
    1391 +#include <linux/module.h>
    1392 +
    1393 +#include "libgcc.h"
    1394 +
    1395 +long long __ashldi3(long long u, word_type b)
    1396 +{
    1397 +       DWunion uu, w;
    1398 +       word_type bm;
    1399 +
    1400 +       if (b == 0)
    1401 +               return u;
    1402 +
    1403 +       uu.ll = u;
    1404 +       bm = 32 - b;
    1405 +
    1406 +       if (bm <= 0) {
    1407 +               w.s.low = 0;
    1408 +               w.s.high = (unsigned int) uu.s.low << -bm;
    1409 +       } else {
    1410 +               const unsigned int carries = (unsigned int) uu.s.low >> bm;
    1411 +
    1412 +               w.s.low = (unsigned int) uu.s.low << b;
    1413 +               w.s.high = ((unsigned int) uu.s.high << b) | carries;
    1414 +       }
    1415 +
    1416 +       return w.ll;
    1417 +}
    1418 +
    1419 +EXPORT_SYMBOL(__ashldi3);
    1420 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/ashrdi3.c linux-2.6.17.13/arch/mips/lib/ashrdi3.c
    1421 --- linux-2.6.17.13.orig/arch/mips/lib/ashrdi3.c        1969-12-31 16:00:00.000000000 -0800
    1422 +++ linux-2.6.17.13/arch/mips/lib/ashrdi3.c     2006-09-09 10:17:04.000000000 -0700
    1423 @@ -0,0 +1,31 @@
    1424 +#include <linux/module.h>
    1425 +
    1426 +#include "libgcc.h"
    1427 +
    1428 +long long __ashrdi3(long long u, word_type b)
    1429 +{
    1430 +       DWunion uu, w;
    1431 +       word_type bm;
    1432 +
    1433 +       if (b == 0)
    1434 +               return u;
    1435 +
    1436 +       uu.ll = u;
    1437 +       bm = 32 - b;
    1438 +
    1439 +       if (bm <= 0) {
    1440 +               /* w.s.high = 1..1 or 0..0 */
    1441 +               w.s.high =
    1442 +                   uu.s.high >> 31;
    1443 +               w.s.low = uu.s.high >> -bm;
    1444 +       } else {
    1445 +               const unsigned int carries = (unsigned int) uu.s.high << bm;
    1446 +
    1447 +               w.s.high = uu.s.high >> b;
    1448 +               w.s.low = ((unsigned int) uu.s.low >> b) | carries;
    1449 +       }
    1450 +
    1451 +       return w.ll;
    1452 +}
    1453 +
    1454 +EXPORT_SYMBOL(__ashrdi3);
    1455 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/iomap.c linux-2.6.17.13/arch/mips/lib/iomap.c
    1456 --- linux-2.6.17.13.orig/arch/mips/lib/iomap.c  2006-09-08 20:23:25.000000000 -0700
    1457 +++ linux-2.6.17.13/arch/mips/lib/iomap.c       1969-12-31 16:00:00.000000000 -0800
     1476diff -Naur linux-2.6.18/arch/mips/lib/iomap.c linux-2.6.18.mips/arch/mips/lib/iomap.c
     1477--- linux-2.6.18/arch/mips/lib/iomap.c  2006-09-19 20:42:06.000000000 -0700
     1478+++ linux-2.6.18.mips/arch/mips/lib/iomap.c     1969-12-31 16:00:00.000000000 -0800
    14581479@@ -1,78 +0,0 @@
    14591480-/*
     
    15351556-EXPORT_SYMBOL(pci_iomap);
    15361557-EXPORT_SYMBOL(pci_iounmap);
    1537 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/libgcc.h linux-2.6.17.13/arch/mips/lib/libgcc.h
    1538 --- linux-2.6.17.13.orig/arch/mips/lib/libgcc.h 1969-12-31 16:00:00.000000000 -0800
    1539 +++ linux-2.6.17.13/arch/mips/lib/libgcc.h      2006-09-09 10:17:04.000000000 -0700
    1540 @@ -0,0 +1,26 @@
    1541 +#ifndef __ASM_LIBGCC_H
    1542 +#define __ASM_LIBGCC_H
    1543 +
    1544 +#include <asm/byteorder.h>
    1545 +
    1546 +typedef int word_type __attribute__ ((mode (__word__)));
    1547 +
    1548 +#ifdef __BIG_ENDIAN
    1549 +struct DWstruct {
    1550 +       int high, low;
    1551 +};
    1552 +#elif defined(__LITTLE_ENDIAN)
    1553 +struct DWstruct {
    1554 +       int low, high;
    1555 +};
    1556 +#else
    1557 +#error I feel sick.
    1558 +#endif
    1559 +
    1560 +typedef union
    1561 +{
    1562 +       struct DWstruct s;
    1563 +       long long ll;
    1564 +} DWunion;
    1565 +
    1566 +#endif /* __ASM_LIBGCC_H */
    1567 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/lshrdi3.c linux-2.6.17.13/arch/mips/lib/lshrdi3.c
    1568 --- linux-2.6.17.13.orig/arch/mips/lib/lshrdi3.c        1969-12-31 16:00:00.000000000 -0800
    1569 +++ linux-2.6.17.13/arch/mips/lib/lshrdi3.c     2006-09-09 10:17:04.000000000 -0700
    1570 @@ -0,0 +1,29 @@
    1571 +#include <linux/module.h>
    1572 +
    1573 +#include "libgcc.h"
    1574 +
    1575 +long long __lshrdi3(long long u, word_type b)
    1576 +{
    1577 +       DWunion uu, w;
    1578 +       word_type bm;
    1579 +
    1580 +       if (b == 0)
    1581 +               return u;
    1582 +
    1583 +       uu.ll = u;
    1584 +       bm = 32 - b;
    1585 +
    1586 +       if (bm <= 0) {
    1587 +               w.s.high = 0;
    1588 +               w.s.low = (unsigned int) uu.s.high >> -bm;
    1589 +       } else {
    1590 +               const unsigned int carries = (unsigned int) uu.s.high << bm;
    1591 +
    1592 +               w.s.high = (unsigned int) uu.s.high >> b;
    1593 +               w.s.low = ((unsigned int) uu.s.low >> b) | carries;
    1594 +       }
    1595 +
    1596 +       return w.ll;
    1597 +}
    1598 +
    1599 +EXPORT_SYMBOL(__lshrdi3);
    1600 diff -Naur linux-2.6.17.13.orig/arch/mips/lib/Makefile linux-2.6.17.13/arch/mips/lib/Makefile
    1601 --- linux-2.6.17.13.orig/arch/mips/lib/Makefile 2006-09-08 20:23:25.000000000 -0700
    1602 +++ linux-2.6.17.13/arch/mips/lib/Makefile      2006-09-09 10:17:04.000000000 -0700
    1603 @@ -5,6 +5,7 @@
     1558diff -Naur linux-2.6.18/arch/mips/lib/Makefile linux-2.6.18.mips/arch/mips/lib/Makefile
     1559--- linux-2.6.18/arch/mips/lib/Makefile 2006-09-19 20:42:06.000000000 -0700
     1560+++ linux-2.6.18.mips/arch/mips/lib/Makefile    2006-09-20 06:55:21.000000000 -0700
     1561@@ -5,8 +5,6 @@
    16041562 lib-y  += csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \
    16051563           strnlen_user.o uncached.o
    16061564 
    16071565-obj-y  += iomap.o
    1608 +# libgcc-style stuff needed in the kernel
    1609 +lib-y += ashldi3.o ashrdi3.o lshrdi3.o
    1610  
    1611  EXTRA_AFLAGS := $(CFLAGS)
    1612 diff -Naur linux-2.6.17.13.orig/arch/mips/lib-32/dump_tlb.c linux-2.6.17.13/arch/mips/lib-32/dump_tlb.c
    1613 --- linux-2.6.17.13.orig/arch/mips/lib-32/dump_tlb.c    2006-09-08 20:23:25.000000000 -0700
    1614 +++ linux-2.6.17.13/arch/mips/lib-32/dump_tlb.c 2006-09-09 10:17:04.000000000 -0700
    1615 @@ -41,8 +41,6 @@
     1566-
     1567 # libgcc-style stuff needed in the kernel
     1568 lib-y += ashldi3.o ashrdi3.o lshrdi3.o
     1569 
     1570diff -Naur linux-2.6.18/arch/mips/lib-32/dump_tlb.c linux-2.6.18.mips/arch/mips/lib-32/dump_tlb.c
     1571--- linux-2.6.18/arch/mips/lib-32/dump_tlb.c    2006-09-19 20:42:06.000000000 -0700
     1572+++ linux-2.6.18.mips/arch/mips/lib-32/dump_tlb.c       2006-09-20 06:55:21.000000000 -0700
     1573@@ -40,8 +40,6 @@
    16161574                return "256Mb";
    16171575 #endif
     
    16221580 
    16231581 #define BARRIER()                                      \
    1624 diff -Naur linux-2.6.17.13.orig/arch/mips/lib-64/dump_tlb.c linux-2.6.17.13/arch/mips/lib-64/dump_tlb.c
    1625 --- linux-2.6.17.13.orig/arch/mips/lib-64/dump_tlb.c    2006-09-08 20:23:25.000000000 -0700
    1626 +++ linux-2.6.17.13/arch/mips/lib-64/dump_tlb.c 2006-09-09 10:17:04.000000000 -0700
    1627 @@ -32,8 +32,6 @@
     1582diff -Naur linux-2.6.18/arch/mips/lib-64/dump_tlb.c linux-2.6.18.mips/arch/mips/lib-64/dump_tlb.c
     1583--- linux-2.6.18/arch/mips/lib-64/dump_tlb.c    2006-09-19 20:42:06.000000000 -0700
     1584+++ linux-2.6.18.mips/arch/mips/lib-64/dump_tlb.c       2006-09-20 06:55:21.000000000 -0700
     1585@@ -31,8 +31,6 @@
    16281586        case PM_256M:   return "256Mb";
    16291587 #endif
     
    16341592 
    16351593 #define BARRIER()                                      \
    1636 diff -Naur linux-2.6.17.13.orig/arch/mips/Makefile linux-2.6.17.13/arch/mips/Makefile
    1637 --- linux-2.6.17.13.orig/arch/mips/Makefile     2006-09-08 20:23:25.000000000 -0700
    1638 +++ linux-2.6.17.13/arch/mips/Makefile  2006-09-09 10:17:04.000000000 -0700
    1639 @@ -83,6 +83,8 @@
    1640  LDFLAGS_vmlinux                        += -G 0 -static -n -nostdlib
    1641  MODFLAGS                       += -mlong-calls
    1642  
    1643 +cflags-y += -ffreestanding
    1644 +
     1594diff -Naur linux-2.6.18/arch/mips/Makefile linux-2.6.18.mips/arch/mips/Makefile
     1595--- linux-2.6.18/arch/mips/Makefile     2006-09-19 20:42:06.000000000 -0700
     1596+++ linux-2.6.18.mips/arch/mips/Makefile        2006-09-20 06:55:21.000000000 -0700
     1597@@ -330,6 +330,7 @@
     1598 # MIPS SEAD board
    16451599 #
    1646  # We explicitly add the endianness specifier if needed, this allows
    1647  # to compile kernels with a toolchain for the other endianness. We
    1648 @@ -365,6 +367,7 @@
    1649  cflags-$(CONFIG_PMC_YOSEMITE)  += -Iinclude/asm-mips/mach-yosemite
    1650  load-$(CONFIG_PMC_YOSEMITE)    += 0xffffffff80100000
    1651  
    1652 +#
    1653  # Qemu simulating MIPS32 4Kc
     1600 core-$(CONFIG_MIPS_SEAD)       += arch/mips/mips-boards/sead/
     1601+cflags-$(CONFIG_MIPS_SEAD)     += -Iinclude/asm-mips/mach-mips
     1602 load-$(CONFIG_MIPS_SEAD)       += 0xffffffff80100000
     1603 
    16541604 #
    1655  core-$(CONFIG_QEMU)            += arch/mips/qemu/
    1656 diff -Naur linux-2.6.17.13.orig/arch/mips/mips-boards/generic/memory.c linux-2.6.17.13/arch/mips/mips-boards/generic/memory.c
    1657 --- linux-2.6.17.13.orig/arch/mips/mips-boards/generic/memory.c 2006-09-08 20:23:25.000000000 -0700
    1658 +++ linux-2.6.17.13/arch/mips/mips-boards/generic/memory.c      2006-09-09 10:17:04.000000000 -0700
    1659 @@ -48,34 +48,45 @@
    1660  };
     1605diff -Naur linux-2.6.18/arch/mips/mips-boards/atlas/atlas_int.c linux-2.6.18.mips/arch/mips/mips-boards/atlas/atlas_int.c
     1606--- linux-2.6.18/arch/mips/mips-boards/atlas/atlas_int.c        2006-09-19 20:42:06.000000000 -0700
     1607+++ linux-2.6.18.mips/arch/mips/mips-boards/atlas/atlas_int.c   2006-09-20 06:55:21.000000000 -0700
     1608@@ -1,6 +1,8 @@
     1609 /*
     1610- * Carsten Langgaard, carstenl@mips.com
     1611- * Copyright (C) 1999,2000 MIPS Technologies, Inc.  All rights reserved.
     1612+ * Copyright (C) 1999, 2000, 2006  MIPS Technologies, Inc.
     1613+ *     All rights reserved.
     1614+ *     Authors: Carsten Langgaard <carstenl@mips.com>
     1615+ *              Maciej W. Rozycki <macro@mips.com>
     1616  *
     1617  * ########################################################################
     1618  *
     1619@@ -25,17 +27,20 @@
     1620  */
     1621 #include <linux/compiler.h>
     1622 #include <linux/init.h>
     1623+#include <linux/irq.h>
     1624 #include <linux/sched.h>
     1625 #include <linux/slab.h>
     1626 #include <linux/interrupt.h>
     1627 #include <linux/kernel_stat.h>
     1628 
     1629-#include <asm/irq.h>
     1630+#include <asm/gdb-stub.h>
     1631 #include <asm/io.h>
     1632+#include <asm/irq_cpu.h>
     1633+#include <asm/msc01_ic.h>
     1634+
     1635 #include <asm/mips-boards/atlas.h>
     1636 #include <asm/mips-boards/atlasint.h>
     1637-#include <asm/gdb-stub.h>
     1638-
     1639+#include <asm/mips-boards/generic.h>
     1640 
     1641 static struct atlas_ictrl_regs *atlas_hw0_icregs;
     1642 
     1643@@ -47,13 +52,13 @@
     1644 
     1645 void disable_atlas_irq(unsigned int irq_nr)
     1646 {
     1647-       atlas_hw0_icregs->intrsten = (1 << (irq_nr-ATLASINT_BASE));
     1648+       atlas_hw0_icregs->intrsten = 1 << (irq_nr - ATLAS_INT_BASE);
     1649        iob();
     1650 }
     1651 
     1652 void enable_atlas_irq(unsigned int irq_nr)
     1653 {
     1654-       atlas_hw0_icregs->intseten = (1 << (irq_nr-ATLASINT_BASE));
     1655+       atlas_hw0_icregs->intseten = 1 << (irq_nr - ATLAS_INT_BASE);
     1656        iob();
     1657 }
     1658 
     1659@@ -107,7 +112,7 @@
     1660        if (unlikely(int_status == 0))
     1661                return;
     1662 
     1663-       irq = ATLASINT_BASE + ls1bit32(int_status);
     1664+       irq = ATLAS_INT_BASE + ls1bit32(int_status);
     1665 
     1666        DEBUG_INT("atlas_hw0_irqdispatch: irq=%d\n", irq);
     1667 
     1668@@ -161,15 +166,14 @@
     1669 }
     1670 
     1671 /*
     1672- * IRQs on the Atlas board look basically (barring software IRQs which we
     1673- * don't use at all and all external interrupt sources are combined together
     1674- * on hardware interrupt 0 (MIPS IRQ 2)) like:
     1675+ * IRQs on the Atlas board look basically like (all external interrupt
     1676+ * sources are combined together on hardware interrupt 0 (MIPS IRQ 2)):
     1677  *
     1678- *     MIPS IRQ        Source
     1679+ *      MIPS IRQ        Source
     1680  *      --------        ------
     1681- *             0       Software (ignored)
     1682- *             1        Software (ignored)
     1683- *             2        Combined hardware interrupt (hw0)
     1684+ *             0        Software 0 (reschedule IPI on MT)
     1685+ *             1        Software 1 (remote call IPI on MT)
     1686+ *             2        Combined Atlas hardware interrupt (hw0)
     1687  *             3        Hardware (ignored)
     1688  *             4        Hardware (ignored)
     1689  *             5        Hardware (ignored)
     1690@@ -179,7 +183,7 @@
     1691  * We handle the IRQ according to _our_ priority which is:
     1692  *
     1693  * Highest ----     R4k Timer
     1694- * Lowest  ----     Combined hardware interrupt
     1695+ * Lowest  ----     Software 0
     1696  *
     1697  * then we just return, if multiple IRQs are pending then we will just take
     1698  * another exception, big deal.
     1699@@ -193,17 +197,19 @@
     1700 
     1701        if (irq == MIPSCPU_INT_ATLAS)
     1702                atlas_hw0_irqdispatch(regs);
     1703-       else if (irq > 0)
     1704+       else if (irq >= 0)
     1705                do_IRQ(MIPSCPU_INT_BASE + irq, regs);
     1706        else
     1707                spurious_interrupt(regs);
     1708 }
     1709 
     1710-void __init arch_init_irq(void)
     1711+static inline void init_atlas_irqs (int base)
     1712 {
     1713        int i;
     1714 
     1715-       atlas_hw0_icregs = (struct atlas_ictrl_regs *)ioremap (ATLAS_ICTRL_REGS_BASE, sizeof(struct atlas_ictrl_regs *));
     1716+       atlas_hw0_icregs = (struct atlas_ictrl_regs *)
     1717+                          ioremap(ATLAS_ICTRL_REGS_BASE,
     1718+                                  sizeof(struct atlas_ictrl_regs *));
     1719 
     1720        /*
     1721         * Mask out all interrupt by writing "1" to all bit position in
     1722@@ -211,7 +217,7 @@
     1723         */
     1724        atlas_hw0_icregs->intrsten = 0xffffffff;
     1725 
     1726-       for (i = ATLASINT_BASE; i <= ATLASINT_END; i++) {
     1727+       for (i = ATLAS_INT_BASE; i <= ATLAS_INT_END; i++) {
     1728                irq_desc[i].status      = IRQ_DISABLED;
     1729                irq_desc[i].action      = 0;
     1730                irq_desc[i].depth       = 1;
     1731@@ -219,3 +225,62 @@
     1732                spin_lock_init(&irq_desc[i].lock);
     1733        }
     1734 }
     1735+
     1736+static struct irqaction atlasirq = {
     1737+       .handler = no_action,
     1738+       .name = "Atlas cascade"
     1739+};
     1740+
     1741+msc_irqmap_t __initdata msc_irqmap[] = {
     1742+       {MSC01C_INT_TMR,                MSC01_IRQ_EDGE, 0},
     1743+       {MSC01C_INT_PCI,                MSC01_IRQ_LEVEL, 0},
     1744+};
     1745+int __initdata msc_nr_irqs = sizeof(msc_irqmap) / sizeof(*msc_irqmap);
     1746+
     1747+msc_irqmap_t __initdata msc_eicirqmap[] = {
     1748+       {MSC01E_INT_SW0,                MSC01_IRQ_LEVEL, 0},
     1749+       {MSC01E_INT_SW1,                MSC01_IRQ_LEVEL, 0},
     1750+       {MSC01E_INT_ATLAS,              MSC01_IRQ_LEVEL, 0},
     1751+       {MSC01E_INT_TMR,                MSC01_IRQ_EDGE, 0},
     1752+       {MSC01E_INT_PCI,                MSC01_IRQ_LEVEL, 0},
     1753+       {MSC01E_INT_PERFCTR,            MSC01_IRQ_LEVEL, 0},
     1754+       {MSC01E_INT_CPUCTR,             MSC01_IRQ_LEVEL, 0}
     1755+};
     1756+int __initdata msc_nr_eicirqs = sizeof(msc_eicirqmap) / sizeof(*msc_eicirqmap);
     1757+
     1758+void __init arch_init_irq(void)
     1759+{
     1760+       init_atlas_irqs(ATLAS_INT_BASE);
     1761+
     1762+       if (!cpu_has_veic)
     1763+               mips_cpu_irq_init(MIPSCPU_INT_BASE);
     1764+
     1765+       switch(mips_revision_corid) {
     1766+       case MIPS_REVISION_CORID_CORE_MSC:
     1767+       case MIPS_REVISION_CORID_CORE_FPGA2:
     1768+       case MIPS_REVISION_CORID_CORE_FPGA3:
     1769+       case MIPS_REVISION_CORID_CORE_24K:
     1770+       case MIPS_REVISION_CORID_CORE_EMUL_MSC:
     1771+               if (cpu_has_veic)
     1772+                       init_msc_irqs (MSC01E_INT_BASE,
     1773+                                      msc_eicirqmap, msc_nr_eicirqs);
     1774+               else
     1775+                       init_msc_irqs (MSC01C_INT_BASE,
     1776+                                      msc_irqmap, msc_nr_irqs);
     1777+       }
     1778+
     1779+
     1780+       if (cpu_has_veic) {
     1781+               set_vi_handler (MSC01E_INT_ATLAS, atlas_hw0_irqdispatch);
     1782+               setup_irq (MSC01E_INT_BASE + MSC01E_INT_ATLAS, &atlasirq);
     1783+       } else if (cpu_has_vint) {
     1784+               set_vi_handler (MIPSCPU_INT_ATLAS, atlas_hw0_irqdispatch);
     1785+#ifdef CONFIG_MIPS_MT_SMTC
     1786+               setup_irq_smtc (MIPSCPU_INT_BASE + MIPSCPU_INT_ATLAS,
     1787+                               &atlasirq, (0x100 << MIPSCPU_INT_ATLAS));
     1788+#else /* Not SMTC */
     1789+               setup_irq(MIPSCPU_INT_BASE + MIPSCPU_INT_ATLAS, &atlasirq);
     1790+#endif /* CONFIG_MIPS_MT_SMTC */
     1791+       } else
     1792+               setup_irq(MIPSCPU_INT_BASE + MIPSCPU_INT_ATLAS, &atlasirq);
     1793+}
     1794diff -Naur linux-2.6.18/arch/mips/mips-boards/atlas/atlas_setup.c linux-2.6.18.mips/arch/mips/mips-boards/atlas/atlas_setup.c
     1795--- linux-2.6.18/arch/mips/mips-boards/atlas/atlas_setup.c      2006-09-19 20:42:06.000000000 -0700
     1796+++ linux-2.6.18.mips/arch/mips/mips-boards/atlas/atlas_setup.c 2006-09-20 06:55:21.000000000 -0700
     1797@@ -77,7 +77,7 @@
     1798 #else
     1799        s.iobase = ATLAS_UART_REGS_BASE+3;
    16611800 #endif
    1662  
    1663 +/* determined physical memory size, not overridden by command line args  */
    1664 +unsigned long physical_memsize = 0L;
    1665 +
    1666  struct prom_pmemblock * __init prom_getmdesc(void)
     1801-       s.irq = ATLASINT_UART;
     1802+       s.irq = ATLAS_INT_UART;
     1803        s.uartclk = ATLAS_BASE_BAUD * 16;
     1804        s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ;
     1805        s.iotype = UPIO_PORT;
     1806diff -Naur linux-2.6.18/arch/mips/mips-boards/generic/time.c linux-2.6.18.mips/arch/mips/mips-boards/generic/time.c
     1807--- linux-2.6.18/arch/mips/mips-boards/generic/time.c   2006-09-19 20:42:06.000000000 -0700
     1808+++ linux-2.6.18.mips/arch/mips/mips-boards/generic/time.c      2006-09-20 06:55:21.000000000 -0700
     1809@@ -41,8 +41,13 @@
     1810 
     1811 #include <asm/mips-boards/generic.h>
     1812 #include <asm/mips-boards/prom.h>
     1813+
     1814+#ifdef CONFIG_MIPS_ATLAS
     1815+#include <asm/mips-boards/atlasint.h>
     1816+#endif
     1817+#ifdef CONFIG_MIPS_MALTA
     1818 #include <asm/mips-boards/maltaint.h>
     1819-#include <asm/mc146818-time.h>
     1820+#endif
     1821 
     1822 unsigned long cpu_khz;
     1823 
     1824@@ -92,10 +97,9 @@
     1825 irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
    16671826 {
    1668         char *memsize_str;
    1669         unsigned int memsize;
    1670         char cmdline[CL_SIZE], *ptr;
    1671  
    1672 -       /* Check the command line first for a memsize directive */
    1673 +       /* otherwise look in the environment */
    1674 +       memsize_str = prom_getenv("memsize");
    1675 +       if (!memsize_str) {
    1676 +               prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
    1677 +               physical_memsize = 0x02000000;
    1678 +       } else {
    1679 +#ifdef DEBUG
    1680 +               prom_printf("prom_memsize = %s\n", memsize_str);
    1681 +#endif
    1682 +               physical_memsize = simple_strtol(memsize_str, NULL, 0);
    1683 +       }
    1684 +
    1685 +#ifdef CONFIG_CPU_BIG_ENDIAN
    1686 +       /* SOC-it swaps, or perhaps doesn't swap, when DMA'ing the last
    1687 +          word of physical memory */
    1688 +       physical_memsize -= PAGE_SIZE;
    1689 +#endif
    1690 +
    1691 +       /* Check the command line for a memsize directive that overrides
    1692 +          the physical/default amount */
    1693         strcpy(cmdline, arcs_cmdline);
    1694         ptr = strstr(cmdline, "memsize=");
    1695         if (ptr && (ptr != cmdline) && (*(ptr - 1) != ' '))
    1696                 ptr = strstr(ptr, " memsize=");
    1697  
    1698 -       if (ptr) {
    1699 +       if (ptr)
    1700                 memsize = memparse(ptr + 8, &ptr);
    1701 -       }
    1702 -       else {
    1703 -               /* otherwise look in the environment */
    1704 -               memsize_str = prom_getenv("memsize");
    1705 -               if (!memsize_str) {
    1706 -                       prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
    1707 -                       memsize = 0x02000000;
    1708 -               } else {
    1709 -#ifdef DEBUG
    1710 -                       prom_printf("prom_memsize = %s\n", memsize_str);
    1711 -#endif
    1712 -                       memsize = simple_strtol(memsize_str, NULL, 0);
    1713 -               }
    1714 -       }
    1715 +       else
    1716 +               memsize = physical_memsize;
    1717 +
    1718         memset(mdesc, 0, sizeof(mdesc));
    1719  
    1720         mdesc[0].type = yamon_dontuse;
    1721 diff -Naur linux-2.6.17.13.orig/arch/mips/mips-boards/malta/malta_int.c linux-2.6.17.13/arch/mips/mips-boards/malta/malta_int.c
    1722 --- linux-2.6.17.13.orig/arch/mips/mips-boards/malta/malta_int.c        2006-09-08 20:23:25.000000000 -0700
    1723 +++ linux-2.6.17.13/arch/mips/mips-boards/malta/malta_int.c     2006-09-09 10:17:04.000000000 -0700
     1827        int cpu = smp_processor_id();
     1828-       int r2 = cpu_has_mips_r2;
     1829 
     1830 #ifdef CONFIG_MIPS_MT_SMTC
     1831-        /*
     1832+       /*
     1833         *  In an SMTC system, one Count/Compare set exists per VPE.
     1834         *  Which TC within a VPE gets the interrupt is essentially
     1835         *  random - we only know that it shouldn't be one with
     1836@@ -108,29 +112,46 @@
     1837         *  the general MIPS timer_interrupt routine.
     1838         */
     1839 
     1840+       int vpflags;
     1841+
     1842        /*
     1843-        * DVPE is necessary so long as cross-VPE interrupts
     1844-        * are done via read-modify-write of Cause register.
     1845+        * We could be here due to timer interrupt,
     1846+        * perf counter overflow, or both.
     1847         */
     1848-       int vpflags = dvpe();
     1849-       write_c0_compare (read_c0_count() - 1);
     1850-       clear_c0_cause(CPUCTR_IMASKBIT);
     1851-       evpe(vpflags);
     1852-
     1853-       if (cpu_data[cpu].vpe_id == 0) {
     1854-               timer_interrupt(irq, dev_id, regs);
     1855-               scroll_display_message();
     1856-       } else
     1857-               write_c0_compare (read_c0_count() + ( mips_hpt_frequency/HZ));
     1858-       smtc_timer_broadcast(cpu_data[cpu].vpe_id);
     1859+       if (read_c0_cause() & (1 << 26))
     1860+               perf_irq(regs);
     1861 
     1862-       if (cpu != 0)
     1863+       if (read_c0_cause() & (1 << 30)) {
     1864+               /* If timer interrupt, make it de-assert */
     1865+               write_c0_compare (read_c0_count() - 1);
     1866                /*
     1867-                * Other CPUs should do profiling and process accounting
     1868+                * DVPE is necessary so long as cross-VPE interrupts
     1869+                * are done via read-modify-write of Cause register.
     1870                 */
     1871-               local_timer_interrupt(irq, dev_id, regs);
     1872-
     1873+               vpflags = dvpe();
     1874+               clear_c0_cause(CPUCTR_IMASKBIT);
     1875+               evpe(vpflags);
     1876+               /*
     1877+                * There are things we only want to do once per tick
     1878+                * in an "MP" system.   One TC of each VPE will take
     1879+                * the actual timer interrupt.  The others will get
     1880+                * timer broadcast IPIs. We use whoever it is that takes
     1881+                * the tick on VPE 0 to run the full timer_interrupt().
     1882+                */
     1883+               if (cpu_data[cpu].vpe_id == 0) {
     1884+                               timer_interrupt(irq, NULL, regs);
     1885+                               smtc_timer_broadcast(cpu_data[cpu].vpe_id);
     1886+                               scroll_display_message();
     1887+               } else {
     1888+                       write_c0_compare(read_c0_count() +
     1889+                                        (mips_hpt_frequency/HZ));
     1890+                       local_timer_interrupt(irq, dev_id, regs);
     1891+                       smtc_timer_broadcast(cpu_data[cpu].vpe_id);
     1892+               }
     1893+       }
     1894 #else /* CONFIG_MIPS_MT_SMTC */
     1895+       int r2 = cpu_has_mips_r2;
     1896+
     1897        if (cpu == 0) {
     1898                /*
     1899                 * CPU 0 handles the global timer interrupt job and process
     1900@@ -161,9 +182,8 @@
     1901                 */
     1902                local_timer_interrupt(irq, dev_id, regs);
     1903        }
     1904-#endif /* CONFIG_MIPS_MT_SMTC */
     1905-
     1906 out:
     1907+#endif /* CONFIG_MIPS_MT_SMTC */
     1908        return IRQ_HANDLED;
     1909 }
     1910 
     1911diff -Naur linux-2.6.18/arch/mips/mips-boards/malta/malta_int.c linux-2.6.18.mips/arch/mips/mips-boards/malta/malta_int.c
     1912--- linux-2.6.18/arch/mips/mips-boards/malta/malta_int.c        2006-09-19 20:42:06.000000000 -0700
     1913+++ linux-2.6.18.mips/arch/mips/mips-boards/malta/malta_int.c   2006-09-20 06:55:21.000000000 -0700
    17241914@@ -208,23 +208,23 @@
    17251915        unsigned int a0 = 7;
     
    17521942        return a0;
    17531943 #endif
    1754 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/cache.c linux-2.6.17.13/arch/mips/mm/cache.c
    1755 --- linux-2.6.17.13.orig/arch/mips/mm/cache.c   2006-09-08 20:23:25.000000000 -0700
    1756 +++ linux-2.6.17.13/arch/mips/mm/cache.c        2006-09-09 10:17:04.000000000 -0700
    1757 @@ -26,7 +26,7 @@
     1944diff -Naur linux-2.6.18/arch/mips/mm/cache.c linux-2.6.18.mips/arch/mips/mm/cache.c
     1945--- linux-2.6.18/arch/mips/mm/cache.c   2006-09-19 20:42:06.000000000 -0700
     1946+++ linux-2.6.18.mips/arch/mips/mm/cache.c      2006-09-20 06:55:21.000000000 -0700
     1947@@ -25,7 +25,7 @@
    17581948 void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
    17591949        unsigned long pfn);
     
    17641954 /* MIPS specific cache operations */
    17651955 void (*flush_cache_sigtramp)(unsigned long addr);
    1766 @@ -71,6 +71,8 @@
     1956@@ -70,6 +70,8 @@
    17671957        struct address_space *mapping = page_mapping(page);
    17681958        unsigned long addr;
     
    17731963                SetPageDcacheDirty(page);
    17741964                return;
    1775 @@ -92,16 +94,16 @@
     1965@@ -91,16 +93,16 @@
    17761966 {
    17771967        struct page *page;
     
    17971987        }
    17981988 }
    1799 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/c-r3k.c linux-2.6.17.13/arch/mips/mm/c-r3k.c
    1800 --- linux-2.6.17.13.orig/arch/mips/mm/c-r3k.c   2006-09-08 20:23:25.000000000 -0700
    1801 +++ linux-2.6.17.13/arch/mips/mm/c-r3k.c        2006-09-09 10:17:04.000000000 -0700
     1989diff -Naur linux-2.6.18/arch/mips/mm/c-r3k.c linux-2.6.18.mips/arch/mips/mm/c-r3k.c
     1990--- linux-2.6.18/arch/mips/mm/c-r3k.c   2006-09-19 20:42:06.000000000 -0700
     1991+++ linux-2.6.18.mips/arch/mips/mm/c-r3k.c      2006-09-20 06:55:21.000000000 -0700
    18021992@@ -335,7 +335,7 @@
    18031993        flush_cache_mm = r3k_flush_cache_mm;
     
    18091999 
    18102000        flush_cache_sigtramp = r3k_flush_cache_sigtramp;
    1811 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/c-r4k.c linux-2.6.17.13/arch/mips/mm/c-r4k.c
    1812 --- linux-2.6.17.13.orig/arch/mips/mm/c-r4k.c   2006-09-08 20:23:25.000000000 -0700
    1813 +++ linux-2.6.17.13/arch/mips/mm/c-r4k.c        2006-09-09 10:17:04.000000000 -0700
    1814 @@ -24,32 +24,12 @@
    1815  #include <asm/page.h>
    1816  #include <asm/pgtable.h>
    1817  #include <asm/r4kcache.h>
    1818 +#include <asm/smp.h>
    1819  #include <asm/system.h>
    1820  #include <asm/mmu_context.h>
    1821  #include <asm/war.h>
    1822  #include <asm/cacheflush.h> /* for run_uncached() */
    1823  
    1824 -
    1825 -/*
    1826 - * Special Variant of smp_call_function for use by cache functions:
    1827 - *
    1828 - *  o No return value
    1829 - *  o collapses to normal function call on UP kernels
    1830 - *  o collapses to normal function call on systems with a single shared
    1831 - *    primary cache.
    1832 - */
    1833 -static inline void r4k_on_each_cpu(void (*func) (void *info), void *info,
    1834 -                                   int retry, int wait)
    1835 -{
    1836 -       preempt_disable();
    1837 -
    1838 -#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
    1839 -       smp_call_function(func, info, retry, wait);
    1840 -#endif
    1841 -       func(info);
    1842 -       preempt_enable();
    1843 -}
    1844 -
    1845  /*
    1846   * Must die.
    1847   */
    1848 @@ -60,13 +40,13 @@
    1849  /*
    1850   * Dummy cache handling routines for machines without boardcaches
    1851   */
    1852 -static void no_sc_noop(void) {}
    1853 +static void cache_noop(void) {}
    1854  
    1855  static struct bcache_ops no_sc_ops = {
    1856 -       .bc_enable = (void *)no_sc_noop,
    1857 -       .bc_disable = (void *)no_sc_noop,
    1858 -       .bc_wback_inv = (void *)no_sc_noop,
    1859 -       .bc_inv = (void *)no_sc_noop
    1860 +       .bc_enable = (void *)cache_noop,
    1861 +       .bc_disable = (void *)cache_noop,
    1862 +       .bc_wback_inv = (void *)cache_noop,
    1863 +       .bc_inv = (void *)cache_noop
    1864  };
    1865  
    1866  struct bcache_ops *bcops = &no_sc_ops;
    1867 @@ -94,7 +74,9 @@
    1868  {
    1869         unsigned long  dc_lsize = cpu_dcache_line_size();
    1870  
    1871 -       if (dc_lsize == 16)
    1872 +       if (dc_lsize == 0)
    1873 +               r4k_blast_dcache_page = (void *)cache_noop;
    1874 +       else if (dc_lsize == 16)
    1875                 r4k_blast_dcache_page = blast_dcache16_page;
    1876         else if (dc_lsize == 32)
    1877                 r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
    1878 @@ -106,7 +88,9 @@
    1879  {
    1880         unsigned long dc_lsize = cpu_dcache_line_size();
    1881  
    1882 -       if (dc_lsize == 16)
    1883 +       if (dc_lsize == 0)
    1884 +               r4k_blast_dcache_page_indexed = (void *)cache_noop;
    1885 +       else if (dc_lsize == 16)
    1886                 r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
    1887         else if (dc_lsize == 32)
    1888                 r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
    1889 @@ -118,7 +102,9 @@
    1890  {
    1891         unsigned long dc_lsize = cpu_dcache_line_size();
    1892  
    1893 -       if (dc_lsize == 16)
    1894 +       if (dc_lsize == 0)
    1895 +               r4k_blast_dcache = (void *)cache_noop;
    1896 +       else if (dc_lsize == 16)
    1897                 r4k_blast_dcache = blast_dcache16;
    1898         else if (dc_lsize == 32)
    1899                 r4k_blast_dcache = blast_dcache32;
    1900 @@ -201,7 +187,9 @@
    1901  {
    1902         unsigned long ic_lsize = cpu_icache_line_size();
    1903  
    1904 -       if (ic_lsize == 16)
    1905 +       if (ic_lsize == 0)
    1906 +               r4k_blast_icache_page = (void *)cache_noop;
    1907 +       else if (ic_lsize == 16)
    1908                 r4k_blast_icache_page = blast_icache16_page;
    1909         else if (ic_lsize == 32)
    1910                 r4k_blast_icache_page = blast_icache32_page;
    1911 @@ -216,7 +204,9 @@
    1912  {
    1913         unsigned long ic_lsize = cpu_icache_line_size();
    1914  
    1915 -       if (ic_lsize == 16)
    1916 +       if (ic_lsize == 0)
    1917 +               r4k_blast_icache_page_indexed = (void *)cache_noop;
    1918 +       else if (ic_lsize == 16)
    1919                 r4k_blast_icache_page_indexed = blast_icache16_page_indexed;
    1920         else if (ic_lsize == 32) {
    1921                 if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
    1922 @@ -238,7 +228,9 @@
    1923  {
    1924         unsigned long ic_lsize = cpu_icache_line_size();
    1925  
    1926 -       if (ic_lsize == 16)
    1927 +       if (ic_lsize == 0)
    1928 +               r4k_blast_icache = (void *)cache_noop;
    1929 +       else if (ic_lsize == 16)
    1930                 r4k_blast_icache = blast_icache16;
    1931         else if (ic_lsize == 32) {
    1932                 if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
    1933 @@ -258,7 +250,7 @@
    1934         unsigned long sc_lsize = cpu_scache_line_size();
    1935  
    1936         if (scache_size == 0)
    1937 -               r4k_blast_scache_page = (void *)no_sc_noop;
    1938 +               r4k_blast_scache_page = (void *)cache_noop;
    1939         else if (sc_lsize == 16)
    1940                 r4k_blast_scache_page = blast_scache16_page;
    1941         else if (sc_lsize == 32)
    1942 @@ -276,7 +268,7 @@
    1943         unsigned long sc_lsize = cpu_scache_line_size();
    1944  
    1945         if (scache_size == 0)
    1946 -               r4k_blast_scache_page_indexed = (void *)no_sc_noop;
    1947 +               r4k_blast_scache_page_indexed = (void *)cache_noop;
    1948         else if (sc_lsize == 16)
    1949                 r4k_blast_scache_page_indexed = blast_scache16_page_indexed;
    1950         else if (sc_lsize == 32)
    1951 @@ -294,7 +286,7 @@
    1952         unsigned long sc_lsize = cpu_scache_line_size();
    1953  
    1954         if (scache_size == 0)
    1955 -               r4k_blast_scache = (void *)no_sc_noop;
    1956 +               r4k_blast_scache = (void *)cache_noop;
    1957         else if (sc_lsize == 16)
    1958                 r4k_blast_scache = blast_scache16;
    1959         else if (sc_lsize == 32)
    1960 @@ -320,7 +312,7 @@
    1961         if (!cpu_has_dc_aliases)
    1962                 return;
    1963  
    1964 -       r4k_on_each_cpu(local_r4k_flush_cache_all, NULL, 1, 1);
    1965 +       __on_each_core(local_r4k_flush_cache_all, NULL);
    1966  }
    1967  
    1968  static inline void local_r4k___flush_cache_all(void * args)
    1969 @@ -342,7 +334,7 @@
    1970  
    1971  static void r4k___flush_cache_all(void)
    1972  {
    1973 -       r4k_on_each_cpu(local_r4k___flush_cache_all, NULL, 1, 1);
    1974 +       __on_each_core(local_r4k___flush_cache_all, NULL);
    1975  }
    1976  
    1977  static inline void local_r4k_flush_cache_range(void * args)
    1978 @@ -363,7 +355,7 @@
    1979  static void r4k_flush_cache_range(struct vm_area_struct *vma,
    1980         unsigned long start, unsigned long end)
    1981  {
    1982 -       r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
    1983 +       __on_each_core(local_r4k_flush_cache_range, vma);
    1984  }
    1985  
    1986  static inline void local_r4k_flush_cache_mm(void * args)
    1987 @@ -392,7 +384,7 @@
    1988         if (!cpu_has_dc_aliases)
    1989                 return;
    1990  
    1991 -       r4k_on_each_cpu(local_r4k_flush_cache_mm, mm, 1, 1);
    1992 +       __on_each_core(local_r4k_flush_cache_mm, mm);
    1993  }
    1994  
    1995  struct flush_cache_page_args {
    1996 @@ -464,7 +456,7 @@
     2001diff -Naur linux-2.6.18/arch/mips/mm/c-r4k.c linux-2.6.18.mips/arch/mips/mm/c-r4k.c
     2002--- linux-2.6.18/arch/mips/mm/c-r4k.c   2006-09-19 20:42:06.000000000 -0700
     2003+++ linux-2.6.18.mips/arch/mips/mm/c-r4k.c      2006-09-20 06:55:21.000000000 -0700
     2004@@ -475,7 +475,7 @@
    19972005                }
    19982006        }
     
    20032011 
    20042012                        if (cpu_context(cpu, mm) != 0)
    2005 @@ -483,7 +475,7 @@
    2006         args.addr = addr;
    2007         args.pfn = pfn;
    2008  
    2009 -       r4k_on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1);
    2010 +       __on_each_core(local_r4k_flush_cache_page, &args);
    2011  }
    2012  
    2013  static inline void local_r4k_flush_data_cache_page(void * addr)
    2014 @@ -493,7 +485,7 @@
    2015  
    2016  static void r4k_flush_data_cache_page(unsigned long addr)
    2017  {
    2018 -       r4k_on_each_cpu(local_r4k_flush_data_cache_page, (void *) addr, 1, 1);
    2019 +       __on_each_core(local_r4k_flush_data_cache_page, (void *) addr);
    2020  }
    2021  
    2022  struct flush_icache_range_args {
    2023 @@ -508,7 +500,7 @@
    2024         unsigned long end = fir_args->end;
    2025  
    2026         if (!cpu_has_ic_fills_f_dc) {
    2027 -               if (end - start > dcache_size) {
    2028 +               if (end - start >= dcache_size) {
    2029                         r4k_blast_dcache();
    2030                 } else {
    2031                         R4600_HIT_CACHEOP_WAR_IMPL;
    2032 @@ -536,7 +528,7 @@
    2033         args.start = start;
    2034         args.end = end;
    2035  
    2036 -       r4k_on_each_cpu(local_r4k_flush_icache_range, &args, 1, 1);
    2037 +       __on_each_core(local_r4k_flush_icache_range, &args);
    2038         instruction_hazard();
    2039  }
    2040  
    2041 @@ -588,7 +580,7 @@
     2013@@ -599,7 +599,7 @@
    20422014         * We're not sure of the virtual address(es) involved here, so
    20432015         * we have to flush the entire I-cache.
     
    20482020 
    20492021                if (cpu_context(cpu, vma->vm_mm) != 0)
    2050 @@ -612,7 +604,7 @@
    2051         args.vma = vma;
    2052         args.page = page;
    2053  
    2054 -       r4k_on_each_cpu(local_r4k_flush_icache_page, &args, 1, 1);
    2055 +       __on_each_core(local_r4k_flush_icache_page, &args);
    2056  }
    2057  
    2058  
    2059 @@ -683,10 +675,12 @@
    2060         unsigned long addr = (unsigned long) arg;
    2061  
    2062         R4600_HIT_CACHEOP_WAR_IMPL;
    2063 -       protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
    2064 +       if (dc_lsize)
    2065 +               protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
    2066         if (!cpu_icache_snoops_remote_store && scache_size)
    2067                 protected_writeback_scache_line(addr & ~(sc_lsize - 1));
    2068 -       protected_flush_icache_line(addr & ~(ic_lsize - 1));
    2069 +       if (ic_lsize)
    2070 +               protected_flush_icache_line(addr & ~(ic_lsize - 1));
    2071         if (MIPS4K_ICACHE_REFILL_WAR) {
    2072                 __asm__ __volatile__ (
    2073                         ".set push\n\t"
    2074 @@ -711,7 +705,7 @@
    2075  
    2076  static void r4k_flush_cache_sigtramp(unsigned long addr)
    2077  {
    2078 -       r4k_on_each_cpu(local_r4k_flush_cache_sigtramp, (void *) addr, 1, 1);
    2079 +       __on_each_core(local_r4k_flush_cache_sigtramp, (void *) addr);
    2080  }
    2081  
    2082  static void r4k_flush_icache_all(void)
    2083 @@ -973,8 +967,10 @@
    2084         c->icache.waysize = icache_size / c->icache.ways;
    2085         c->dcache.waysize = dcache_size / c->dcache.ways;
    2086  
    2087 -       c->icache.sets = icache_size / (c->icache.linesz * c->icache.ways);
    2088 -       c->dcache.sets = dcache_size / (c->dcache.linesz * c->dcache.ways);
    2089 +       c->icache.sets = c->icache.linesz ?
    2090 +               icache_size / (c->icache.linesz * c->icache.ways) : 0;
    2091 +       c->dcache.sets = c->dcache.linesz ?
    2092 +               dcache_size / (c->dcache.linesz * c->dcache.ways) : 0;
    2093  
     2022@@ -1242,7 +1242,7 @@
     2023                clear_c0_config(CONF_CU);
     2024                break;
    20942025        /*
    2095          * R10000 and R12000 P-caches are odd in a positive way.  They're 32kB
    2096 @@ -993,10 +989,15 @@
    2097                 break;
    2098         case CPU_24K:
    2099         case CPU_34K:
    2100 -               if (!(read_c0_config7() & (1 << 16)))
    2101 +               if ((read_c0_config7() & (1 << 16))) {
    2102 +                       /* effectively physically indexed dcache,
    2103 +                          thus no virtual aliases. */
    2104 +                       c->dcache.flags |= MIPS_CACHE_PINDEX;
    2105 +                       break;
    2106 +               }
    2107         default:
    2108 -                       if (c->dcache.waysize > PAGE_SIZE)
    2109 -                               c->dcache.flags |= MIPS_CACHE_ALIASES;
    2110 +               if (c->dcache.waysize > PAGE_SIZE)
    2111 +                       c->dcache.flags |= MIPS_CACHE_ALIASES;
    2112         }
    2113  
    2114         switch (c->cputype) {
    2115 @@ -1092,6 +1093,7 @@
    2116  
    2117  extern int r5k_sc_init(void);
    2118  extern int rm7k_sc_init(void);
    2119 +extern int mips_sc_init(void);
    2120  
    2121  static void __init setup_scache(void)
    2122  {
    2123 @@ -1139,17 +1141,29 @@
    2124                 return;
    2125  
    2126         default:
    2127 +               if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
    2128 +                   c->isa_level == MIPS_CPU_ISA_M32R2 ||
    2129 +                   c->isa_level == MIPS_CPU_ISA_M64R1 ||
    2130 +                   c->isa_level == MIPS_CPU_ISA_M64R2) {
    2131 +#ifdef CONFIG_MIPS_CPU_SCACHE
    2132 +                       if (mips_sc_init ()) {
    2133 +                               scache_size = c->scache.ways * c->scache.sets * c->scache.linesz;
    2134 +                               printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
    2135 +                                      scache_size >> 10,
    2136 +                                      way_string[c->scache.ways], c->scache.linesz);
    2137 +                       }
    2138 +#else
    2139 +                       if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
    2140 +                               panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
    2141 +#endif
    2142 +                       return;
    2143 +               }
    2144                 sc_present = 0;
    2145         }
    2146  
    2147         if (!sc_present)
    2148                 return;
    2149  
    2150 -       if ((c->isa_level == MIPS_CPU_ISA_M32R1 ||
    2151 -            c->isa_level == MIPS_CPU_ISA_M64R1) &&
    2152 -           !(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
    2153 -               panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
    2154 -
    2155         /* compute a couple of other cache variables */
    2156         c->scache.waysize = scache_size / c->scache.ways;
    2157  
    2158 @@ -1246,15 +1260,17 @@
    2159          * This code supports virtually indexed processors and will be
    2160          * unnecessarily inefficient on physically indexed processors.
     2026-        * We need to catch the ealry Alchemy SOCs with
     2027+        * We need to catch the early Alchemy SOCs with
     2028         * the write-only co_config.od bit and set it back to one...
    21612029         */
    2162 -       shm_align_mask = max_t( unsigned long,
    2163 -                               c->dcache.sets * c->dcache.linesz - 1,
    2164 -                               PAGE_SIZE - 1);
    2165 -
    2166 +       if (c->dcache.linesz)
    2167 +               shm_align_mask = max_t( unsigned long,
    2168 +                                       c->dcache.sets * c->dcache.linesz - 1,
    2169 +                                       PAGE_SIZE - 1);
    2170 +       else
    2171 +               shm_align_mask = PAGE_SIZE-1;
    2172         flush_cache_all         = r4k_flush_cache_all;
     2030        case CPU_AU1000: /* rev. DA, HA, HB */
     2031@@ -1291,7 +1291,7 @@
    21732032        __flush_cache_all       = r4k___flush_cache_all;
    21742033        flush_cache_mm          = r4k_flush_cache_mm;
     
    21792038 
    21802039        flush_cache_sigtramp    = r4k_flush_cache_sigtramp;
    2181 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/c-sb1.c linux-2.6.17.13/arch/mips/mm/c-sb1.c
    2182 --- linux-2.6.17.13.orig/arch/mips/mm/c-sb1.c   2006-09-08 20:23:25.000000000 -0700
    2183 +++ linux-2.6.17.13/arch/mips/mm/c-sb1.c        2006-09-09 10:17:04.000000000 -0700
    2184 @@ -156,6 +156,26 @@
     2040diff -Naur linux-2.6.18/arch/mips/mm/c-sb1.c linux-2.6.18.mips/arch/mips/mm/c-sb1.c
     2041--- linux-2.6.18/arch/mips/mm/c-sb1.c   2006-09-19 20:42:06.000000000 -0700
     2042+++ linux-2.6.18.mips/arch/mips/mm/c-sb1.c      2006-09-20 06:55:21.000000000 -0700
     2043@@ -155,6 +155,26 @@
    21852044 }
    21862045 
     
    22092068  * dcache first, then invalidate the icache.  If the page isn't
    22102069  * executable, nothing is required.
    2211 @@ -174,8 +194,11 @@
     2070@@ -173,8 +193,11 @@
    22122071        /*
    22132072         * Bumping the ASID is probably cheaper than the flush ...
     
    22232082 
    22242083 #ifdef CONFIG_SMP
    2225 @@ -211,26 +234,6 @@
     2084@@ -210,26 +233,6 @@
    22262085        __attribute__((alias("local_sb1_flush_cache_page")));
    22272086 #endif
     
    22502109 /*
    22512110  * Invalidate all caches on this CPU
    2252 @@ -327,9 +330,12 @@
     2111@@ -326,9 +329,12 @@
    22532112         * If there's a context, bump the ASID (cheaper than a flush,
    22542113         * since we don't know VAs!)
     
    22662125 
    22672126 #ifdef CONFIG_SMP
    2268 @@ -521,7 +527,7 @@
     2127@@ -520,7 +526,7 @@
    22692128 
    22702129        /* These routines are for Icache coherence with the Dcache */
     
    22752134 
    22762135        /* This implies an Icache flush too, so can't be nop'ed */
    2277 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/c-tx39.c linux-2.6.17.13/arch/mips/mm/c-tx39.c
    2278 --- linux-2.6.17.13.orig/arch/mips/mm/c-tx39.c  2006-09-08 20:23:25.000000000 -0700
    2279 +++ linux-2.6.17.13/arch/mips/mm/c-tx39.c       2006-09-09 10:17:04.000000000 -0700
     2136diff -Naur linux-2.6.18/arch/mips/mm/c-tx39.c linux-2.6.18.mips/arch/mips/mm/c-tx39.c
     2137--- linux-2.6.18/arch/mips/mm/c-tx39.c  2006-09-19 20:42:06.000000000 -0700
     2138+++ linux-2.6.18.mips/arch/mips/mm/c-tx39.c     2006-09-20 06:55:21.000000000 -0700
    22802139@@ -382,7 +382,7 @@
    22812140                flush_cache_mm          = (void *) tx39h_flush_icache_all;
     
    22962155 
    22972156                flush_cache_sigtramp = tx39_flush_cache_sigtramp;
    2298 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/init.c linux-2.6.17.13/arch/mips/mm/init.c
    2299 --- linux-2.6.17.13.orig/arch/mips/mm/init.c    2006-09-08 20:23:25.000000000 -0700
    2300 +++ linux-2.6.17.13/arch/mips/mm/init.c 2006-09-09 10:17:04.000000000 -0700
    2301 @@ -31,11 +31,39 @@
     2157diff -Naur linux-2.6.18/arch/mips/mm/fault.c linux-2.6.18.mips/arch/mips/mm/fault.c
     2158--- linux-2.6.18/arch/mips/mm/fault.c   2006-09-19 20:42:06.000000000 -0700
     2159+++ linux-2.6.18.mips/arch/mips/mm/fault.c      2006-09-20 06:55:21.000000000 -0700
     2160@@ -89,7 +89,7 @@
     2161                if (!(vma->vm_flags & VM_WRITE))
     2162                        goto bad_area;
     2163        } else {
     2164-               if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
     2165+               if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)))
     2166                        goto bad_area;
     2167        }
     2168 
     2169diff -Naur linux-2.6.18/arch/mips/mm/init.c linux-2.6.18.mips/arch/mips/mm/init.c
     2170--- linux-2.6.18/arch/mips/mm/init.c    2006-09-19 20:42:06.000000000 -0700
     2171+++ linux-2.6.18.mips/arch/mips/mm/init.c       2006-09-20 06:55:21.000000000 -0700
     2172@@ -30,11 +30,39 @@
    23022173 #include <asm/cachectl.h>
    23032174 #include <asm/cpu.h>
     
    23392210 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
    23402211 
    2341 @@ -81,13 +109,183 @@
     2212@@ -80,13 +108,184 @@
    23422213        return 1UL << order;
    23432214 }
     
    23742245+       unsigned long old_ctx;
    23752246+       pte_t pte;
    2376 +       unsigned int tlbidx;
     2247+       int tlbidx;
    23772248+
    23782249+       inc_preempt_count();
     
    24382309+       mtc0_tlbw_hazard();
    24392310+       tlb_write_indexed();
     2311+       tlbw_use_hazard();
    24402312+       write_c0_entryhi(old_ctx);
    24412313+       EXIT_CRITICAL(flags);
     
    25262398 {
    25272399        unsigned long kmap_vstart;
    2528 @@ -98,11 +296,12 @@
     2400@@ -97,11 +296,12 @@
    25292401 
    25302402        kmap_prot = PAGE_KERNEL;
     
    25402412        pud_t *pud;
    25412413        pmd_t *pmd;
    2542 @@ -123,7 +322,7 @@
     2414@@ -122,7 +322,7 @@
    25432415                        for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) {
    25442416                                if (pmd_none(*pmd)) {
     
    25492421                                                BUG();
    25502422                                }
    2551 @@ -133,9 +332,8 @@
     2423@@ -132,9 +332,8 @@
    25522424                }
    25532425                j = 0;
     
    25602432 #ifndef CONFIG_NEED_MULTIPLE_NODES
    25612433 extern void pagetable_init(void);
    2562 @@ -150,6 +348,7 @@
     2434@@ -175,6 +374,7 @@
    25632435 #ifdef CONFIG_HIGHMEM
    25642436        kmap_init();
     
    25682440        max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
    25692441        low = max_low_pfn;
    2570 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/Makefile linux-2.6.17.13/arch/mips/mm/Makefile
    2571 --- linux-2.6.17.13.orig/arch/mips/mm/Makefile  2006-09-08 20:23:25.000000000 -0700
    2572 +++ linux-2.6.17.13/arch/mips/mm/Makefile       2006-09-09 10:17:04.000000000 -0700
    2573 @@ -30,6 +30,7 @@
    2574  obj-$(CONFIG_IP22_CPU_SCACHE)  += sc-ip22.o
    2575  obj-$(CONFIG_R5000_CPU_SCACHE)  += sc-r5k.o
    2576  obj-$(CONFIG_RM7000_CPU_SCACHE)        += sc-rm7k.o
    2577 +obj-$(CONFIG_MIPS_CPU_SCACHE)  += sc-mips.o
    2578  
    2579  #
    2580  # Choose one DMA coherency model
    2581 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/pgtable-32.c linux-2.6.17.13/arch/mips/mm/pgtable-32.c
    2582 --- linux-2.6.17.13.orig/arch/mips/mm/pgtable-32.c      2006-09-08 20:23:25.000000000 -0700
    2583 +++ linux-2.6.17.13/arch/mips/mm/pgtable-32.c   2006-09-09 10:17:04.000000000 -0700
    2584 @@ -32,9 +32,10 @@
     2442diff -Naur linux-2.6.18/arch/mips/mm/pgtable-32.c linux-2.6.18.mips/arch/mips/mm/pgtable-32.c
     2443--- linux-2.6.18/arch/mips/mm/pgtable-32.c      2006-09-19 20:42:06.000000000 -0700
     2444+++ linux-2.6.18.mips/arch/mips/mm/pgtable-32.c 2006-09-20 06:55:21.000000000 -0700
     2445@@ -31,9 +31,10 @@
    25852446 
    25862447 void __init pagetable_init(void)
     
    25952456        pmd_t *pmd;
    25962457        pte_t *pte;
    2597 @@ -45,7 +46,6 @@
     2458@@ -44,7 +45,6 @@
    25982459        pgd_init((unsigned long)swapper_pg_dir
    25992460                 + sizeof(pgd_t) * USER_PTRS_PER_PGD);
     
    26032464 
    26042465        /*
    2605 @@ -54,6 +54,7 @@
     2466@@ -53,6 +53,7 @@
    26062467        vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
    26072468        fixrange_init(vaddr, 0, pgd_base);
     
    26112472         * Permanent kmaps:
    26122473         */
    2613 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/pgtable-64.c linux-2.6.17.13/arch/mips/mm/pgtable-64.c
    2614 --- linux-2.6.17.13.orig/arch/mips/mm/pgtable-64.c      2006-09-08 20:23:25.000000000 -0700
    2615 +++ linux-2.6.17.13/arch/mips/mm/pgtable-64.c   2006-09-09 10:17:04.000000000 -0700
     2474diff -Naur linux-2.6.18/arch/mips/mm/pgtable-64.c linux-2.6.18.mips/arch/mips/mm/pgtable-64.c
     2475--- linux-2.6.18/arch/mips/mm/pgtable-64.c      2006-09-19 20:42:06.000000000 -0700
     2476+++ linux-2.6.18.mips/arch/mips/mm/pgtable-64.c 2006-09-20 06:55:21.000000000 -0700
    26162477@@ -8,6 +8,7 @@
    26172478  */
     
    26402501+       fixrange_init(vaddr, 0, pgd_base);
    26412502 }
    2642 diff -Naur linux-2.6.17.13.orig/arch/mips/mm/sc-mips.c linux-2.6.17.13/arch/mips/mm/sc-mips.c
    2643 --- linux-2.6.17.13.orig/arch/mips/mm/sc-mips.c 1969-12-31 16:00:00.000000000 -0800
    2644 +++ linux-2.6.17.13/arch/mips/mm/sc-mips.c      2006-09-09 10:17:04.000000000 -0700
    2645 @@ -0,0 +1,112 @@
    2646 +/*
    2647 + * Copyright (C) 2006 Chris Dearman (chris@mips.com),
    2648 + */
    2649 +#include <linux/init.h>
    2650 +#include <linux/kernel.h>
    2651 +#include <linux/sched.h>
    2652 +#include <linux/mm.h>
    2653 +
    2654 +#include <asm/mipsregs.h>
    2655 +#include <asm/bcache.h>
    2656 +#include <asm/cacheops.h>
    2657 +#include <asm/page.h>
    2658 +#include <asm/pgtable.h>
    2659 +#include <asm/system.h>
    2660 +#include <asm/mmu_context.h>
    2661 +#include <asm/r4kcache.h>
    2662 +
    2663 +/*
    2664 + * MIPS32/MIPS64 L2 cache handling
    2665 + */
    2666 +
    2667 +/*
    2668 + * Writeback and invalidate the secondary cache before DMA.
    2669 + */
    2670 +static void mips_sc_wback_inv(unsigned long addr, unsigned long size)
    2671 +{
    2672 +       blast_scache_range(addr, addr + size);
    2673 +}
    2674 +
    2675 +/*
    2676 + * Invalidate the secondary cache before DMA.
    2677 + */
    2678 +static void mips_sc_inv(unsigned long addr, unsigned long size)
    2679 +{
    2680 +       blast_inv_scache_range(addr, addr + size);
    2681 +}
    2682 +
    2683 +static void mips_sc_enable(void)
    2684 +{
    2685 +       /* L2 cache is permanently enabled */
    2686 +}
    2687 +
    2688 +static void mips_sc_disable(void)
    2689 +{
    2690 +       /* L2 cache is permanently enabled */
    2691 +}
    2692 +
    2693 +static struct bcache_ops mips_sc_ops = {
    2694 +       .bc_enable = mips_sc_enable,
    2695 +       .bc_disable = mips_sc_disable,
    2696 +       .bc_wback_inv = mips_sc_wback_inv,
    2697 +       .bc_inv = mips_sc_inv
    2698 +};
    2699 +
    2700 +static inline int __init mips_sc_probe(void)
    2701 +{
    2702 +       struct cpuinfo_mips *c = &current_cpu_data;
    2703 +       unsigned int config1, config2;
    2704 +       unsigned int tmp;
    2705 +
    2706 +       /* Mark as not present until probe completed */
    2707 +       c->scache.flags |= MIPS_CACHE_NOT_PRESENT;
    2708 +
    2709 +       /* Ignore anything but MIPSxx processors */
    2710 +       if (c->isa_level != MIPS_CPU_ISA_M32R1 &&
    2711 +           c->isa_level != MIPS_CPU_ISA_M32R2 &&
    2712 +           c->isa_level != MIPS_CPU_ISA_M64R1 &&
    2713 +           c->isa_level != MIPS_CPU_ISA_M64R2)
    2714 +               return 0;
    2715 +
    2716 +       /* Does this MIPS32/MIPS64 CPU have a config2 register? */
    2717 +       config1 = read_c0_config1();
    2718 +       if (!(config1 & MIPS_CONF_M))
    2719 +               return 0;
    2720 +
    2721 +       config2 = read_c0_config2();
    2722 +       tmp = (config2 >> 4) & 0x0f;
    2723 +       if (0 < tmp && tmp <= 7)
    2724 +               c->scache.linesz = 2 << tmp;
    2725 +       else
    2726 +               return 0;
    2727 +
    2728 +       tmp = (config2 >> 8) & 0x0f;
    2729 +       if (0 <= tmp && tmp <= 7)
    2730 +               c->scache.sets = 64 << tmp;
    2731 +       else
    2732 +               return 0;
    2733 +
    2734 +       tmp = (config2 >> 0) & 0x0f;
    2735 +       if (0 <= tmp && tmp <= 7)
    2736 +               c->scache.ways = tmp + 1;
    2737 +       else
    2738 +               return 0;
    2739 +
    2740 +       c->scache.waysize = c->scache.sets * c->scache.linesz;
    2741 +       c->scache.waybit = __ffs(c->scache.waysize);
    2742 +
    2743 +       c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
    2744 +
    2745 +       return 1;
    2746 +}
    2747 +
    2748 +int __init mips_sc_init(void)
    2749 +{
    2750 +       int found = mips_sc_probe ();
    2751 +       if (found) {
    2752 +               mips_sc_enable();
    2753 +               bcops = &mips_sc_ops;
    2754 +       }
    2755 +       return found;
    2756 +}
    2757 +
    2758 diff -Naur linux-2.6.17.13.orig/arch/mips/pci/fixup-tb0219.c linux-2.6.17.13/arch/mips/pci/fixup-tb0219.c
    2759 --- linux-2.6.17.13.orig/arch/mips/pci/fixup-tb0219.c   2006-09-08 20:23:25.000000000 -0700
    2760 +++ linux-2.6.17.13/arch/mips/pci/fixup-tb0219.c        2006-09-09 10:17:04.000000000 -0700
     2503diff -Naur linux-2.6.18/arch/mips/pci/fixup-atlas.c linux-2.6.18.mips/arch/mips/pci/fixup-atlas.c
     2504--- linux-2.6.18/arch/mips/pci/fixup-atlas.c    2006-09-19 20:42:06.000000000 -0700
     2505+++ linux-2.6.18.mips/arch/mips/pci/fixup-atlas.c       2006-09-20 06:55:21.000000000 -0700
     2506@@ -21,16 +21,16 @@
     2507 
     2508 #include <asm/mips-boards/atlasint.h>
     2509 
     2510-#define PCIA           ATLASINT_PCIA
     2511-#define PCIB           ATLASINT_PCIB
     2512-#define PCIC           ATLASINT_PCIC
     2513-#define PCID           ATLASINT_PCID
     2514-#define INTA           ATLASINT_INTA
     2515-#define INTB           ATLASINT_INTB
     2516-#define ETH            ATLASINT_ETH
     2517-#define INTC           ATLASINT_INTC
     2518-#define SCSI           ATLASINT_SCSI
     2519-#define INTD           ATLASINT_INTD
     2520+#define PCIA           ATLAS_INT_PCIA
     2521+#define PCIB           ATLAS_INT_PCIB
     2522+#define PCIC           ATLAS_INT_PCIC
     2523+#define PCID           ATLAS_INT_PCID
     2524+#define INTA           ATLAS_INT_INTA
     2525+#define INTB           ATLAS_INT_INTB
     2526+#define ETH            ATLAS_INT_ETH
     2527+#define INTC           ATLAS_INT_INTC
     2528+#define SCSI           ATLAS_INT_SCSI
     2529+#define INTD           ATLAS_INT_INTD
     2530 
     2531 static char irq_tab[][5] __initdata = {
     2532        /*      INTA    INTB    INTC    INTD */
     2533diff -Naur linux-2.6.18/arch/mips/pci/fixup-tb0219.c linux-2.6.18.mips/arch/mips/pci/fixup-tb0219.c
     2534--- linux-2.6.18/arch/mips/pci/fixup-tb0219.c   2006-09-19 20:42:06.000000000 -0700
     2535+++ linux-2.6.18.mips/arch/mips/pci/fixup-tb0219.c      2006-09-20 06:55:21.000000000 -0700
    27612536@@ -2,7 +2,7 @@
    27622537  *  fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups.
     
    27682543  *  This program is free software; you can redistribute it and/or modify
    27692544  *  it under the terms of the GNU General Public License as published by
    2770 diff -Naur linux-2.6.17.13.orig/arch/mips/pci/ops-au1000.c linux-2.6.17.13/arch/mips/pci/ops-au1000.c
    2771 --- linux-2.6.17.13.orig/arch/mips/pci/ops-au1000.c     2006-09-08 20:23:25.000000000 -0700
    2772 +++ linux-2.6.17.13/arch/mips/pci/ops-au1000.c  2006-09-09 10:17:04.000000000 -0700
    2773 @@ -111,7 +111,7 @@
     2545diff -Naur linux-2.6.18/arch/mips/pci/Makefile linux-2.6.18.mips/arch/mips/pci/Makefile
     2546--- linux-2.6.18/arch/mips/pci/Makefile 2006-09-19 20:42:06.000000000 -0700
     2547+++ linux-2.6.18.mips/arch/mips/pci/Makefile    2006-09-20 06:55:21.000000000 -0700
     2548@@ -28,7 +28,7 @@
     2549 obj-$(CONFIG_LASAT)            += pci-lasat.o
     2550 obj-$(CONFIG_MIPS_ATLAS)       += fixup-atlas.o
     2551 obj-$(CONFIG_MIPS_COBALT)      += fixup-cobalt.o
     2552-obj-$(CONFIG_MIPS_EV96100)     += fixup-ev64120.o
     2553+obj-$(CONFIG_MIPS_EV64120)     += fixup-ev64120.o
     2554 obj-$(CONFIG_MIPS_EV96100)     += fixup-ev96100.o pci-ev96100.o
     2555 obj-$(CONFIG_MIPS_ITE8172)     += fixup-ite8172g.o
     2556 obj-$(CONFIG_MIPS_IVR)         += fixup-ivr.o
     2557diff -Naur linux-2.6.18/arch/mips/pci/ops-au1000.c linux-2.6.18.mips/arch/mips/pci/ops-au1000.c
     2558--- linux-2.6.18/arch/mips/pci/ops-au1000.c     2006-09-19 20:42:06.000000000 -0700
     2559+++ linux-2.6.18.mips/arch/mips/pci/ops-au1000.c        2006-09-20 06:55:21.000000000 -0700
     2560@@ -110,7 +110,7 @@
    27742561        if (first_cfg) {
    27752562                /* reserve a wired entry for pci config accesses */
     
    27802567                        panic (KERN_ERR "PCI unable to get vm area\n");
    27812568                pci_cfg_wired_entry = read_c0_wired();
    2782 diff -Naur linux-2.6.17.13.orig/arch/mips/qemu/Makefile linux-2.6.17.13/arch/mips/qemu/Makefile
    2783 --- linux-2.6.17.13.orig/arch/mips/qemu/Makefile        2006-09-08 20:23:25.000000000 -0700
    2784 +++ linux-2.6.17.13/arch/mips/qemu/Makefile     2006-09-09 10:17:04.000000000 -0700
     2569diff -Naur linux-2.6.18/arch/mips/qemu/Makefile linux-2.6.18.mips/arch/mips/qemu/Makefile
     2570--- linux-2.6.18/arch/mips/qemu/Makefile        2006-09-19 20:42:06.000000000 -0700
     2571+++ linux-2.6.18.mips/arch/mips/qemu/Makefile   2006-09-20 06:55:21.000000000 -0700
    27852572@@ -4,4 +4,5 @@
    27862573 
    2787  obj-y          = q-firmware.o q-irq.o q-mem.o q-setup.o
     2574 obj-y          = q-firmware.o q-irq.o q-mem.o q-setup.o q-reset.o
    27882575 
    27892576+obj-$(CONFIG_VT) += q-vga.o
    27902577 obj-$(CONFIG_SMP) += q-smp.o
    2791 diff -Naur linux-2.6.17.13.orig/arch/mips/qemu/q-setup.c linux-2.6.17.13/arch/mips/qemu/q-setup.c
    2792 --- linux-2.6.17.13.orig/arch/mips/qemu/q-setup.c       2006-09-08 20:23:25.000000000 -0700
    2793 +++ linux-2.6.17.13/arch/mips/qemu/q-setup.c    2006-09-09 10:17:04.000000000 -0700
    2794 @@ -2,6 +2,8 @@
     2578diff -Naur linux-2.6.18/arch/mips/qemu/q-setup.c linux-2.6.18.mips/arch/mips/qemu/q-setup.c
     2579--- linux-2.6.18/arch/mips/qemu/q-setup.c       2006-09-19 20:42:06.000000000 -0700
     2580+++ linux-2.6.18.mips/arch/mips/qemu/q-setup.c  2006-09-20 06:55:21.000000000 -0700
     2581@@ -2,6 +2,7 @@
    27952582 #include <asm/io.h>
    27962583 #include <asm/time.h>
    27972584 
    27982585+extern void qvga_init(void);
    2799 +
     2586 extern void qemu_reboot_setup(void);
     2587 
    28002588 #define QEMU_PORT_BASE 0xb4000000
    2801  
    2802  const char *get_system_type(void)
    2803 @@ -21,5 +23,8 @@
    2804  void __init plat_setup(void)
     2589@@ -23,5 +24,9 @@
     2590 void __init plat_mem_setup(void)
    28052591 {
    28062592        set_io_port_base(QEMU_PORT_BASE);
     
    28082594+       qvga_init();
    28092595+#endif
    2810         board_timer_setup = qemu_timer_setup;
     2596+
     2597        qemu_reboot_setup();
    28112598 }
    2812 diff -Naur linux-2.6.17.13.orig/arch/mips/qemu/q-vga.c linux-2.6.17.13/arch/mips/qemu/q-vga.c
    2813 --- linux-2.6.17.13.orig/arch/mips/qemu/q-vga.c 1969-12-31 16:00:00.000000000 -0800
    2814 +++ linux-2.6.17.13/arch/mips/qemu/q-vga.c      2006-09-09 10:17:04.000000000 -0700
    2815 @@ -0,0 +1,188 @@
     2599diff -Naur linux-2.6.18/arch/mips/qemu/q-vga.c linux-2.6.18.mips/arch/mips/qemu/q-vga.c
     2600--- linux-2.6.18/arch/mips/qemu/q-vga.c 1969-12-31 16:00:00.000000000 -0800
     2601+++ linux-2.6.18.mips/arch/mips/qemu/q-vga.c    2006-09-20 06:55:21.000000000 -0700
     2602@@ -0,0 +1,189 @@
    28162603+/*
    28172604+ * This file is subject to the terms and conditions of the GNU General Public
     
    28242611+ */
    28252612+#include <linux/init.h>
     2613+#include <linux/screen_info.h>
    28262614+#include <linux/tty.h>
    28272615+#include <asm/io.h>
     
    30022790+#endif
    30032791+}
    3004 diff -Naur linux-2.6.17.13.orig/arch/mips/sgi-ip22/ip22-time.c linux-2.6.17.13/arch/mips/sgi-ip22/ip22-time.c
    3005 --- linux-2.6.17.13.orig/arch/mips/sgi-ip22/ip22-time.c 2006-09-08 20:23:25.000000000 -0700
    3006 +++ linux-2.6.17.13/arch/mips/sgi-ip22/ip22-time.c      2006-09-09 10:17:04.000000000 -0700
    3007 @@ -76,7 +76,7 @@
    3008         save_control = hpc3c0->rtcregs[RTC_CMD] & 0xff;
    3009         hpc3c0->rtcregs[RTC_CMD] = save_control | RTC_TE;
    3010  
    3011 -       hpc3c0->rtcregs[RTC_YEAR] = BIN2BCD(tm.tm_sec);
    3012 +       hpc3c0->rtcregs[RTC_YEAR] = BIN2BCD(tm.tm_year);
    3013         hpc3c0->rtcregs[RTC_MONTH] = BIN2BCD(tm.tm_mon);
    3014         hpc3c0->rtcregs[RTC_DATE] = BIN2BCD(tm.tm_mday);
    3015         hpc3c0->rtcregs[RTC_HOURS] = BIN2BCD(tm.tm_hour);
    3016 diff -Naur linux-2.6.17.13.orig/arch/mips/sgi-ip27/ip27-irq.c linux-2.6.17.13/arch/mips/sgi-ip27/ip27-irq.c
    3017 --- linux-2.6.17.13.orig/arch/mips/sgi-ip27/ip27-irq.c  2006-09-08 20:23:25.000000000 -0700
    3018 +++ linux-2.6.17.13/arch/mips/sgi-ip27/ip27-irq.c       2006-09-09 10:17:04.000000000 -0700
    3019 @@ -360,7 +360,7 @@
    3020  
    3021  static unsigned long irq_map[NR_IRQS / BITS_PER_LONG];
    3022  
    3023 -static int allocate_irqno(void)
    3024 +int allocate_irqno(void)
    3025  {
    3026         int irq;
    3027  
    3028 diff -Naur linux-2.6.17.13.orig/arch/mips/sgi-ip27/ip27-timer.c linux-2.6.17.13/arch/mips/sgi-ip27/ip27-timer.c
    3029 --- linux-2.6.17.13.orig/arch/mips/sgi-ip27/ip27-timer.c        2006-09-08 20:23:25.000000000 -0700
    3030 +++ linux-2.6.17.13/arch/mips/sgi-ip27/ip27-timer.c     2006-09-09 10:17:04.000000000 -0700
    3031 @@ -89,11 +89,13 @@
     2792diff -Naur linux-2.6.18/arch/mips/sibyte/bcm1480/irq.c linux-2.6.18.mips/arch/mips/sibyte/bcm1480/irq.c
     2793--- linux-2.6.18/arch/mips/sibyte/bcm1480/irq.c 2006-09-19 20:42:06.000000000 -0700
     2794+++ linux-2.6.18.mips/arch/mips/sibyte/bcm1480/irq.c    2006-09-20 06:55:21.000000000 -0700
     2795@@ -469,21 +469,6 @@
     2796 
     2797 #endif         /* CONFIG_KGDB */
     2798 
     2799-static inline int dclz(unsigned long long x)
     2800-{
     2801-       int lz;
     2802-
     2803-       __asm__ (
     2804-       "       .set    push                                            \n"
     2805-       "       .set    mips64                                          \n"
     2806-       "       dclz    %0, %1                                          \n"
     2807-       "       .set    pop                                             \n"
     2808-       : "=r" (lz)
     2809-       : "r" (x));
     2810-
     2811-       return lz;
     2812-}
     2813-
     2814 extern void bcm1480_timer_interrupt(struct pt_regs *regs);
     2815 extern void bcm1480_mailbox_interrupt(struct pt_regs *regs);
     2816 extern void bcm1480_kgdb_interrupt(struct pt_regs *regs);
     2817@@ -536,9 +521,9 @@
     2818 
     2819                if (mask_h) {
     2820                        if (mask_h ^ 1)
     2821-                               do_IRQ(63 - dclz(mask_h), regs);
     2822+                               do_IRQ(fls64(mask_h) - 1, regs);
     2823                        else
     2824-                               do_IRQ(127 - dclz(mask_l), regs);
     2825+                               do_IRQ(63 + fls64(mask_l), regs);
     2826                }
     2827        }
    30322828 }
    3033  #endif
    3034  
    3035 +static unsigned int rt_timer_irq;
    3036 +
    3037  void ip27_rt_timer_interrupt(struct pt_regs *regs)
    3038  {
    3039         int cpu = smp_processor_id();
    3040         int cpuA = cputoslice(cpu) == 0;
    3041 -       int irq = 9;                            /* XXX Assign number */
    3042 +       unsigned int irq = rt_timer_irq;
    3043  
    3044         irq_enter();
    3045         write_seqlock(&xtime_lock);
    3046 @@ -179,13 +181,68 @@
    3047          return mktime(year, month, date, hour, min, sec);
    3048  }
    3049  
    3050 +static void startup_rt_irq(unsigned int irq)
    3051 +{
    3052 +}
    3053 +
    3054 +static void shutdown_rt_irq(unsigned int irq)
    3055 +{
    3056 +}
    3057 +
    3058 +static void enable_rt_irq(unsigned int irq)
    3059 +{
    3060 +}
    3061 +
    3062 +static void disable_rt_irq(unsigned int irq)
    3063 +{
    3064 +}
    3065 +
    3066 +static void mask_and_ack_rt(unsigned int irq)
    3067 +{
    3068 +}
    3069 +
    3070 +static void end_rt_irq(unsigned int irq)
    3071 +{
    3072 +}
    3073 +
    3074 +static struct hw_interrupt_type rt_irq_type = {
    3075 +       .typename       = "SN HUB RT timer",
    3076 +       .startup        = startup_rt_irq,
    3077 +       .shutdown       = shutdown_rt_irq,
    3078 +       .enable         = enable_rt_irq,
    3079 +       .disable        = disable_rt_irq,
    3080 +       .ack            = mask_and_ack_rt,
    3081 +       .end            = end_rt_irq,
    3082 +};
    3083 +
    3084 +static struct irqaction rt_irqaction = {
    3085 +       .handler        = ip27_rt_timer_interrupt,
    3086 +       .flags          = SA_INTERRUPT,
    3087 +       .mask           = CPU_MASK_NONE,
    3088 +       .name           = "timer"
    3089 +};
    3090 +
    3091 +extern int allocate_irqno(void);
    3092 +
    3093  static void ip27_timer_setup(struct irqaction *irq)
    3094  {
    3095 +       int irqno  = allocate_irqno();
    3096 +
    3097 +       if (irqno < 0)
    3098 +               panic("Can't allocate interrupt number for timer interrupt");
    3099 +
    3100 +       irq_desc[irqno].status = IRQ_DISABLED;
    3101 +       irq_desc[irqno].action = NULL;
    3102 +       irq_desc[irqno].depth = 1;
    3103 +       irq_desc[irqno].handler = &rt_irq_type;
    3104 +
    3105         /* over-write the handler, we use our own way */
    3106         irq->handler = no_action;
    3107  
    3108         /* setup irqaction */
    3109 -//     setup_irq(IP27_TIMER_IRQ, irq);         /* XXX Can't do this yet.  */
    3110 +       irq_desc[irqno].status |= IRQ_PER_CPU;
    3111 +
    3112 +       rt_timer_irq = irqno;
    3113  }
    3114  
    3115  void __init ip27_time_init(void)
    3116 diff -Naur linux-2.6.17.13.orig/arch/mips/sgi-ip27/Kconfig linux-2.6.17.13/arch/mips/sgi-ip27/Kconfig
    3117 --- linux-2.6.17.13.orig/arch/mips/sgi-ip27/Kconfig     2006-09-08 20:23:25.000000000 -0700
    3118 +++ linux-2.6.17.13/arch/mips/sgi-ip27/Kconfig  2006-09-09 10:17:04.000000000 -0700
    3119 @@ -35,12 +35,13 @@
    3120         depends on SGI_IP27
    3121         help
    3122           Change the way a Linux kernel is loaded into memory on a MIPS64
    3123 -         machine.  This is required in order to support text replication and
    3124 +         machine.  This is required in order to support text replication on
    3125           NUMA.  If you need to understand it, read the source code.
    3126  
    3127  config REPLICATE_KTEXT
    3128         bool "Kernel text replication support"
    3129         depends on SGI_IP27
    3130 +       select MAPPED_KERNEL
    3131         help
    3132           Say Y here to enable replicating the kernel text across multiple
    3133           nodes in a NUMA cluster.  This trades memory for speed.
    3134 diff -Naur linux-2.6.17.13.orig/arch/mips/sibyte/bcm1480/irq.c linux-2.6.17.13/arch/mips/sibyte/bcm1480/irq.c
    3135 --- linux-2.6.17.13.orig/arch/mips/sibyte/bcm1480/irq.c 2006-09-08 20:23:25.000000000 -0700
    3136 +++ linux-2.6.17.13/arch/mips/sibyte/bcm1480/irq.c      2006-09-09 10:17:04.000000000 -0700
    3137 @@ -503,22 +503,23 @@
    3138  #ifdef CONFIG_SIBYTE_BCM1480_PROF
    3139         if (pending & CAUSEF_IP7)       /* Cpu performance counter interrupt */
    3140                 sbprof_cpu_intr(exception_epc(regs));
    3141 +       else
    3142  #endif
    3143  
    3144         if (pending & CAUSEF_IP4)
    3145                 bcm1480_timer_interrupt(regs);
    3146  
    3147  #ifdef CONFIG_SMP
    3148 -       if (pending & CAUSEF_IP3)
    3149 +       else if (pending & CAUSEF_IP3)
    3150                 bcm1480_mailbox_interrupt(regs);
    3151  #endif
    3152  
    3153  #ifdef CONFIG_KGDB
    3154 -       if (pending & CAUSEF_IP6)
    3155 +       else if (pending & CAUSEF_IP6)
    3156                 bcm1480_kgdb_interrupt(regs);           /* KGDB (uart 1) */
    3157  #endif
    3158  
    3159 -       if (pending & CAUSEF_IP2) {
    3160 +       else if (pending & CAUSEF_IP2) {
    3161                 unsigned long long mask_h, mask_l;
    3162                 unsigned long base;
    3163  
    3164 @@ -534,7 +535,7 @@
    3165                 mask_l = __raw_readq(
    3166                         IOADDR(base + R_BCM1480_IMR_INTERRUPT_STATUS_BASE_L));
    3167  
    3168 -               if (!mask_h) {
    3169 +               if (mask_h) {
    3170                         if (mask_h ^ 1)
    3171                                 do_IRQ(63 - dclz(mask_h), regs);
    3172                         else
    3173 diff -Naur linux-2.6.17.13.orig/arch/mips/sibyte/bcm1480/time.c linux-2.6.17.13/arch/mips/sibyte/bcm1480/time.c
    3174 --- linux-2.6.17.13.orig/arch/mips/sibyte/bcm1480/time.c        2006-09-08 20:23:25.000000000 -0700
    3175 +++ linux-2.6.17.13/arch/mips/sibyte/bcm1480/time.c     2006-09-09 10:17:04.000000000 -0700
    3176 @@ -110,17 +110,18 @@
    3177         __raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS,
    3178               IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
    3179  
    3180 -       /*
    3181 -        * CPU 0 handles the global timer interrupt job
    3182 -        */
    3183         if (cpu == 0) {
    3184 +               /*
    3185 +                * CPU 0 handles the global timer interrupt job
    3186 +                */
    3187                 ll_timer_interrupt(irq, regs);
    3188         }
     2829diff -Naur linux-2.6.18/arch/mips/sibyte/sb1250/irq.c linux-2.6.18.mips/arch/mips/sibyte/sb1250/irq.c
     2830--- linux-2.6.18/arch/mips/sibyte/sb1250/irq.c  2006-09-19 20:42:06.000000000 -0700
     2831+++ linux-2.6.18.mips/arch/mips/sibyte/sb1250/irq.c     2006-09-20 06:55:21.000000000 -0700
     2832@@ -419,21 +419,6 @@
     2833 
     2834 #endif         /* CONFIG_KGDB */
     2835 
     2836-static inline int dclz(unsigned long long x)
     2837-{
     2838-       int lz;
    31892839-
    3190 -       /*
    3191 -        * every CPU should do profiling and process accouting
    3192 -        */
    3193 -       ll_local_timer_interrupt(irq, regs);
    3194 +       else {
    3195 +               /*
    3196 +                * other CPUs should just do profiling and process accounting
    3197 +                */
    3198 +               ll_local_timer_interrupt(irq, regs);
    3199 +       }
    3200  }
    3201  
    3202  /*
    3203 diff -Naur linux-2.6.17.13.orig/arch/mips/sibyte/Kconfig linux-2.6.17.13/arch/mips/sibyte/Kconfig
    3204 --- linux-2.6.17.13.orig/arch/mips/sibyte/Kconfig       2006-09-08 20:23:25.000000000 -0700
    3205 +++ linux-2.6.17.13/arch/mips/sibyte/Kconfig    2006-09-09 10:17:04.000000000 -0700
    3206 @@ -3,6 +3,7 @@
    3207         select HW_HAS_PCI
    3208         select SIBYTE_HAS_LDT
    3209         select SIBYTE_SB1xxx_SOC
    3210 +       select SYS_SUPPORTS_SMP
    3211  
    3212  config SIBYTE_BCM1120
    3213         bool
    3214 @@ -30,11 +31,13 @@
    3215         bool
    3216         select HW_HAS_PCI
    3217         select SIBYTE_SB1xxx_SOC
    3218 +       select SYS_SUPPORTS_SMP
    3219  
    3220  config SIBYTE_BCM1x55
    3221         bool
    3222         select HW_HAS_PCI
    3223         select SIBYTE_SB1xxx_SOC
    3224 +       select SYS_SUPPORTS_SMP
    3225  
    3226  config SIBYTE_SB1xxx_SOC
    3227         bool
    3228 diff -Naur linux-2.6.17.13.orig/arch/mips/sibyte/sb1250/irq.c linux-2.6.17.13/arch/mips/sibyte/sb1250/irq.c
    3229 --- linux-2.6.17.13.orig/arch/mips/sibyte/sb1250/irq.c  2006-09-08 20:23:25.000000000 -0700
    3230 +++ linux-2.6.17.13/arch/mips/sibyte/sb1250/irq.c       2006-09-09 10:17:04.000000000 -0700
    3231 @@ -435,13 +435,17 @@
    3232         return lz;
    3233  }
    3234  
    3235 +extern void sb1250_timer_interrupt(struct pt_regs *regs);
    3236 +extern void sb1250_mailbox_interrupt(struct pt_regs *regs);
    3237 +extern void sb1250_kgdb_interrupt(struct pt_regs *regs);
    3238 +
    3239  asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
    3240  {
    3241         unsigned int pending;
    3242  
    3243  #ifdef CONFIG_SIBYTE_SB1250_PROF
    3244         /* Set compare to count to silence count/compare timer interrupts */
    3245 -       write_c0_count(read_c0_count());
    3246 +       write_c0_compare(read_c0_count());
    3247  #endif
    3248  
    3249         /*
    3250 @@ -457,32 +461,32 @@
    3251         pending = read_c0_cause();
    3252  
    3253  #ifdef CONFIG_SIBYTE_SB1250_PROF
    3254 -       if (pending & CAUSEF_IP7) { /* Cpu performance counter interrupt */
    3255 +       if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
    3256                 sbprof_cpu_intr(exception_epc(regs));
    3257 -       }
    3258 +       else
    3259  #endif
    3260  
    3261         if (pending & CAUSEF_IP4)
    3262                 sb1250_timer_interrupt(regs);
    3263  
    3264  #ifdef CONFIG_SMP
    3265 -       if (pending & CAUSEF_IP3)
    3266 +       else if (pending & CAUSEF_IP3)
    3267                 sb1250_mailbox_interrupt(regs);
    3268  #endif
    3269  
    3270  #ifdef CONFIG_KGDB
    3271 -       if (pending & CAUSEF_IP6)                       /* KGDB (uart 1) */
    3272 +       else if (pending & CAUSEF_IP6)                  /* KGDB (uart 1) */
    3273                 sb1250_kgdb_interrupt(regs);
    3274  #endif
    3275  
    3276 -       if (pending & CAUSEF_IP2) {
    3277 +       else if (pending & CAUSEF_IP2) {
    3278                 unsigned long long mask;
    3279  
    3280                 /*
    3281                  * Default...we've hit an IP[2] interrupt, which means we've
    3282                  * got to check the 1250 interrupt registers to figure out what
    3283                  * to do.  Need to detect which CPU we're on, now that
    3284 -                ~ smp_affinity is supported.
    3285 +                * smp_affinity is supported.
    3286                  */
     2840-       __asm__ (
     2841-       "       .set    push                                            \n"
     2842-       "       .set    mips64                                          \n"
     2843-       "       dclz    %0, %1                                          \n"
     2844-       "       .set    pop                                             \n"
     2845-       : "=r" (lz)
     2846-       : "r" (x));
     2847-
     2848-       return lz;
     2849-}
     2850-
     2851 extern void sb1250_timer_interrupt(struct pt_regs *regs);
     2852 extern void sb1250_mailbox_interrupt(struct pt_regs *regs);
     2853 extern void sb1250_kgdb_interrupt(struct pt_regs *regs);
     2854@@ -490,6 +475,6 @@
    32872855                mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(),
    32882856                                              R_IMR_INTERRUPT_STATUS_BASE)));
    3289 diff -Naur linux-2.6.17.13.orig/arch/mips/sibyte/swarm/setup.c linux-2.6.17.13/arch/mips/sibyte/swarm/setup.c
    3290 --- linux-2.6.17.13.orig/arch/mips/sibyte/swarm/setup.c 2006-09-08 20:23:25.000000000 -0700
    3291 +++ linux-2.6.17.13/arch/mips/sibyte/swarm/setup.c      2006-09-09 10:17:04.000000000 -0700
    3292 @@ -72,8 +72,10 @@
    3293  
    3294  void __init swarm_time_init(void)
    3295  {
    3296 +#if defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
    3297         /* Setup HPT */
    3298         sb1250_hpt_setup();
    3299 +#endif
     2857                if (mask)
     2858-                       do_IRQ(63 - dclz(mask), regs);
     2859+                       do_IRQ(fls64(mask) - 1, regs);
     2860        }
    33002861 }
    3301  
    3302  void __init swarm_timer_setup(struct irqaction *irq)
    3303 diff -Naur linux-2.6.17.13.orig/Documentation/feature-removal-schedule.txt linux-2.6.17.13/Documentation/feature-removal-schedule.txt
    3304 --- linux-2.6.17.13.orig/Documentation/feature-removal-schedule.txt     2006-09-08 20:23:25.000000000 -0700
    3305 +++ linux-2.6.17.13/Documentation/feature-removal-schedule.txt  2006-09-09 10:17:04.000000000 -0700
    3306 @@ -147,16 +147,6 @@
    3307  
    3308  ---------------------------
    3309  
    3310 -What:  au1x00_uart driver
    3311 -When:  January 2006
    3312 -Why:   The 8250 serial driver now has the ability to deal with the differences
    3313 -       between the standard 8250 family of UARTs and their slightly strange
    3314 -       brother on Alchemy SOCs.  The loss of features is not considered an
    3315 -       issue.
    3316 -Who:   Ralf Baechle <ralf@linux-mips.org>
    3317 -
    3318 ----------------------------
    3319 -
    3320  What:   eepro100 network driver
    3321  When:   January 2007
    3322  Why:    replaced by the e100 driver
    3323 diff -Naur linux-2.6.17.13.orig/drivers/char/au1000_gpio.c linux-2.6.17.13/drivers/char/au1000_gpio.c
    3324 --- linux-2.6.17.13.orig/drivers/char/au1000_gpio.c     1969-12-31 16:00:00.000000000 -0800
    3325 +++ linux-2.6.17.13/drivers/char/au1000_gpio.c  2006-09-09 10:17:04.000000000 -0700
     2862diff -Naur linux-2.6.18/drivers/char/au1000_gpio.c linux-2.6.18.mips/drivers/char/au1000_gpio.c
     2863--- linux-2.6.18/drivers/char/au1000_gpio.c     1969-12-31 16:00:00.000000000 -0800
     2864+++ linux-2.6.18.mips/drivers/char/au1000_gpio.c        2006-09-20 06:55:21.000000000 -0700
    33262865@@ -0,0 +1,266 @@
    33272866+/*
     
    35913130+module_init(au1000gpio_init);
    35923131+module_exit(au1000gpio_exit);
    3593 diff -Naur linux-2.6.17.13.orig/drivers/char/au1000_ts.c linux-2.6.17.13/drivers/char/au1000_ts.c
    3594 --- linux-2.6.17.13.orig/drivers/char/au1000_ts.c       1969-12-31 16:00:00.000000000 -0800
    3595 +++ linux-2.6.17.13/drivers/char/au1000_ts.c    2006-09-09 10:17:04.000000000 -0700
     3132diff -Naur linux-2.6.18/drivers/char/au1000_ts.c linux-2.6.18.mips/drivers/char/au1000_ts.c
     3133--- linux-2.6.18/drivers/char/au1000_ts.c       1969-12-31 16:00:00.000000000 -0800
     3134+++ linux-2.6.18.mips/drivers/char/au1000_ts.c  2006-09-20 06:55:21.000000000 -0700
    35963135@@ -0,0 +1,677 @@
    35973136+/*
     
    42723811+module_init(au1000ts_init_module);
    42733812+module_exit(au1000ts_cleanup_module);
    4274 diff -Naur linux-2.6.17.13.orig/drivers/char/au1000_usbraw.c linux-2.6.17.13/drivers/char/au1000_usbraw.c
    4275 --- linux-2.6.17.13.orig/drivers/char/au1000_usbraw.c   1969-12-31 16:00:00.000000000 -0800
    4276 +++ linux-2.6.17.13/drivers/char/au1000_usbraw.c        2006-09-09 10:17:04.000000000 -0700
     3813diff -Naur linux-2.6.18/drivers/char/au1000_usbraw.c linux-2.6.18.mips/drivers/char/au1000_usbraw.c
     3814--- linux-2.6.18/drivers/char/au1000_usbraw.c   1969-12-31 16:00:00.000000000 -0800
     3815+++ linux-2.6.18.mips/drivers/char/au1000_usbraw.c      2006-09-20 06:55:21.000000000 -0700
    42773816@@ -0,0 +1,573 @@
    42783817+/*
     
    48494388+module_init(usbfn_raw_init);
    48504389+module_exit(usbfn_raw_exit);
    4851 diff -Naur linux-2.6.17.13.orig/drivers/char/au1000_usbtty.c linux-2.6.17.13/drivers/char/au1000_usbtty.c
    4852 --- linux-2.6.17.13.orig/drivers/char/au1000_usbtty.c   1969-12-31 16:00:00.000000000 -0800
    4853 +++ linux-2.6.17.13/drivers/char/au1000_usbtty.c        2006-09-09 10:17:04.000000000 -0700
     4390diff -Naur linux-2.6.18/drivers/char/au1000_usbtty.c linux-2.6.18.mips/drivers/char/au1000_usbtty.c
     4391--- linux-2.6.18/drivers/char/au1000_usbtty.c   1969-12-31 16:00:00.000000000 -0800
     4392+++ linux-2.6.18.mips/drivers/char/au1000_usbtty.c      2006-09-20 06:55:21.000000000 -0700
    48544393@@ -0,0 +1,761 @@
    48554394+/*
     
    56145153+module_init(usbfn_tty_init);
    56155154+module_exit(usbfn_tty_exit);
    5616 diff -Naur linux-2.6.17.13.orig/drivers/char/decserial.c linux-2.6.17.13/drivers/char/decserial.c
    5617 --- linux-2.6.17.13.orig/drivers/char/decserial.c       2006-09-08 20:23:25.000000000 -0700
    5618 +++ linux-2.6.17.13/drivers/char/decserial.c    2006-09-09 10:17:04.000000000 -0700
    5619 @@ -14,87 +14,85 @@
     5155diff -Naur linux-2.6.18/drivers/char/decserial.c linux-2.6.18.mips/drivers/char/decserial.c
     5156--- linux-2.6.18/drivers/char/decserial.c       2006-09-19 20:42:06.000000000 -0700
     5157+++ linux-2.6.18.mips/drivers/char/decserial.c  2006-09-20 06:55:21.000000000 -0700
     5158@@ -14,86 +14,84 @@
    56205159  *      device. Added support for PROM console in drivers/char/tty_io.c
    56215160  *      instead. Although it may work to enable more than one
     
    56255164  */
    56265165 
    5627  #include <linux/config.h>
    56285166+#include <linux/errno.h>
    56295167 #include <linux/init.h>
     
    57515289 
    57525290 #endif
    5753 diff -Naur linux-2.6.17.13.orig/drivers/char/ibm_workpad_keymap.map linux-2.6.17.13/drivers/char/ibm_workpad_keymap.map
    5754 --- linux-2.6.17.13.orig/drivers/char/ibm_workpad_keymap.map    1969-12-31 16:00:00.000000000 -0800
    5755 +++ linux-2.6.17.13/drivers/char/ibm_workpad_keymap.map 2006-09-09 10:17:04.000000000 -0700
    5756 @@ -0,0 +1,343 @@
    5757 +# Keymap for IBM Workpad z50
    5758 +# US Mapping
    5759 +#
    5760 +# by Michael Klar <wyldfier@iname.com>
    5761 +#
    5762 +# This is a great big mess on account of how the Caps Lock key is handled as
    5763 +# LeftShift-RightShift.  Right shift key had to be broken out, so don't use
    5764 +# use this map file as a basis for other keyboards that don't do the same
    5765 +# thing with Caps Lock.
    5766 +#
    5767 +# This file is subject to the terms and conditions of the GNU General Public
    5768 +# License.  See the file "COPYING" in the main directory of this archive
    5769 +# for more details.
    5770 +
    5771 +keymaps 0-2,4-5,8,12,32-33,36-37
    5772 +strings as usual
    5773 +
    5774 +keycode 0 = F1 F11 Console_13
    5775 +       shiftr keycode 0 = F11
    5776 +       shift shiftr keycode 0 = F11
    5777 +       control keycode 0 = F1
    5778 +       alt keycode 0 = Console_1
    5779 +       control alt keycode 0 = Console_1
    5780 +keycode 1 = F3 F13 Console_15
    5781 +       shiftr keycode 1 = F13
    5782 +       shift shiftr keycode 1 = F13
    5783 +       control keycode 1 = F3
    5784 +       alt keycode 1 = Console_3
    5785 +       control alt keycode 1 = Console_3
    5786 +keycode 2 = F5 F15 Console_17
    5787 +       shiftr keycode 2 = F15
    5788 +       shift shiftr keycode 2 = F15
    5789 +       control keycode 2 = F5
    5790 +       alt keycode 2 = Console_5
    5791 +       control alt keycode 2 = Console_5
    5792 +keycode 3 = F7 F17 Console_19
    5793 +       shiftr keycode 3 = F17
    5794 +       shift shiftr keycode 3 = F17
    5795 +       control keycode 3 = F7
    5796 +       alt keycode 3 = Console_7
    5797 +       control alt keycode 3 = Console_7
    5798 +keycode 4 = F9 F19 Console_21
    5799 +       shiftr keycode 4 = F19
    5800 +       shift shiftr keycode 4 = F19
    5801 +       control keycode 4 = F9
    5802 +       alt keycode 4 = Console_9
    5803 +       control alt keycode 4 = Console_9
    5804 +#keycode 5 is contrast down
    5805 +#keycode 6 is contrast up
    5806 +keycode 7 = F11 F11 Console_23
    5807 +       shiftr keycode 7 = F11
    5808 +       shift shiftr keycode 7 = F11
    5809 +       control keycode 7 = F11
    5810 +       alt keycode 7 = Console_11
    5811 +       control alt keycode 7 = Console_11
    5812 +keycode 8 = F2 F12 Console_14
    5813 +       shiftr keycode 8 = F12
    5814 +       shift shiftr keycode 8 = F12
    5815 +       control keycode 8 = F2
    5816 +       alt keycode 8 = Console_2
    5817 +       control alt keycode 8 = Console_2
    5818 +keycode 9 = F4 F14 Console_16
    5819 +       shiftr keycode 9 = F14
    5820 +       shift shiftr keycode 9 = F14
    5821 +       control keycode 9 = F4
    5822 +       alt keycode 9 = Console_4
    5823 +       control alt keycode 9 = Console_4
    5824 +keycode 10 = F6 F16 Console_18
    5825 +       shiftr keycode 10 = F16
    5826 +       shift shiftr keycode 10 = F16
    5827 +       control keycode 10 = F6
    5828 +       alt keycode 10 = Console_6
    5829 +       control alt keycode 10 = Console_6
    5830 +keycode 11 = F8 F18 Console_20
    5831 +       shiftr keycode 11 = F18
    5832 +       shift shiftr keycode 11 = F18
    5833 +       control keycode 11 = F8
    5834 +       alt keycode 11 = Console_8
    5835 +       control alt keycode 11 = Console_8
    5836 +keycode 12 = F10 F20 Console_22
    5837 +       shiftr keycode 12 = F20
    5838 +       shift shiftr keycode 12 = F20
    5839 +       control keycode 12 = F10
    5840 +       alt keycode 12 = Console_10
    5841 +       control alt keycode 12 = Console_10
    5842 +#keycode 13 is brightness down
    5843 +#keycode 14 is brightness up
    5844 +keycode 15 = F12 F12 Console_24
    5845 +       shiftr keycode 15 = F12
    5846 +       shift shiftr keycode 15 = F12
    5847 +       control keycode 15 = F12
    5848 +       alt keycode 15 = Console_12
    5849 +       control alt keycode 15 = Console_12
    5850 +keycode 16 = apostrophe quotedbl
    5851 +       shiftr keycode 16 = quotedbl
    5852 +       shift shiftr keycode 16 = quotedbl
    5853 +       control keycode 16 = Control_g
    5854 +       alt keycode 16 = Meta_apostrophe
    5855 +keycode 17 = bracketleft braceleft
    5856 +       shiftr keycode 17 = braceleft
    5857 +       shift shiftr keycode 17 = braceleft
    5858 +       control keycode 17 = Escape
    5859 +       alt keycode 17 = Meta_bracketleft
    5860 +keycode 18 = minus underscore backslash       
    5861 +       shiftr keycode 18 = underscore
    5862 +       shift shiftr keycode 18 = underscore
    5863 +       control keycode 18 = Control_underscore
    5864 +       shift control keycode 18 = Control_underscore
    5865 +       shiftr control keycode 18 = Control_underscore
    5866 +       shift shiftr control keycode 18 = Control_underscore
    5867 +       alt keycode 18 = Meta_minus
    5868 +keycode 19 = zero parenright braceright
    5869 +       shiftr keycode 19 = parenright
    5870 +       shift shiftr keycode 19 = parenright
    5871 +       alt keycode 19 = Meta_zero
    5872 +keycode 20 = p
    5873 +       shiftr keycode 20 = +P
    5874 +       shift shiftr keycode 20 = +p
    5875 +keycode 21 = semicolon colon
    5876 +       shiftr keycode 21 = colon
    5877 +       shift shiftr keycode 21 = colon
    5878 +       alt keycode 21 = Meta_semicolon
    5879 +keycode 22 = Up Scroll_Backward
    5880 +       shiftr keycode 22 = Scroll_Backward
    5881 +       shift shiftr keycode 22 = Scroll_Backward
    5882 +       alt keycode 22 = Prior
    5883 +keycode 23 = slash question
    5884 +       shiftr keycode 23 = question
    5885 +       shift shiftr keycode 23 = question
    5886 +       control keycode 23 = Delete
    5887 +       alt keycode 23 = Meta_slash
    5888 +
    5889 +keycode 27 = nine parenleft bracketright
    5890 +       shiftr keycode 27 = parenleft
    5891 +       shift shiftr keycode 27 = parenleft
    5892 +       alt keycode 27 = Meta_nine
    5893 +keycode 28 = o
    5894 +       shiftr keycode 28 = +O
    5895 +       shift shiftr keycode 28 = +o
    5896 +keycode 29 = l
    5897 +       shiftr keycode 29 = +L
    5898 +       shift shiftr keycode 29 = +l
    5899 +keycode 30 = period greater
    5900 +       shiftr keycode 30 = greater
    5901 +       shift shiftr keycode 30 = greater
    5902 +       control keycode 30 = Compose
    5903 +       alt keycode 30 = Meta_period
    5904 +
    5905 +keycode 32 = Left Decr_Console
    5906 +       shiftr keycode 32 = Decr_Console
    5907 +       shift shiftr keycode 32 = Decr_Console
    5908 +       alt keycode 32 = Home
    5909 +keycode 33 = bracketright braceright asciitilde     
    5910 +       shiftr keycode 33 = braceright
    5911 +       shift shiftr keycode 33 = braceright
    5912 +       control keycode 33 = Control_bracketright
    5913 +       alt keycode 33 = Meta_bracketright
    5914 +keycode 34 = equal plus
    5915 +       shiftr keycode 34 = plus
    5916 +       shift shiftr keycode 34 = plus
    5917 +       alt keycode 34 = Meta_equal
    5918 +keycode 35 = eight asterisk bracketleft
    5919 +       shiftr keycode 35 = asterisk
    5920 +       shift shiftr keycode 35 = asterisk
    5921 +       control keycode 35 = Delete
    5922 +       alt keycode 35 = Meta_eight
    5923 +keycode 36 = i
    5924 +       shiftr keycode 36 = +I
    5925 +       shift shiftr keycode 36 = +i
    5926 +keycode 37 = k
    5927 +       shiftr keycode 37 = +K
    5928 +       shift shiftr keycode 37 = +k
    5929 +keycode 38 = comma less
    5930 +       shiftr keycode 38 = less
    5931 +       shift shiftr keycode 38 = less
    5932 +       alt keycode 38 = Meta_comma
    5933 +
    5934 +keycode 40 = h
    5935 +       shiftr keycode 40 = +H
    5936 +       shift shiftr keycode 40 = +h
    5937 +keycode 41 = y
    5938 +       shiftr keycode 41 = +Y
    5939 +       shift shiftr keycode 41 = +y
    5940 +keycode 42 = six asciicircum
    5941 +       shiftr keycode 42 = asciicircum
    5942 +       shift shiftr keycode 42 = asciicircum
    5943 +       control keycode 42 = Control_asciicircum
    5944 +       alt keycode 42 = Meta_six
    5945 +keycode 43 = seven ampersand braceleft
    5946 +       shiftr keycode 43 = ampersand
    5947 +       shift shiftr keycode 43 = ampersand
    5948 +       control keycode 43 = Control_underscore
    5949 +       alt keycode 43 = Meta_seven
    5950 +keycode 44 = u
    5951 +       shiftr keycode 44 = +U
    5952 +       shift shiftr keycode 44 = +u
    5953 +keycode 45 = j
    5954 +       shiftr keycode 45 = +J
    5955 +       shift shiftr keycode 45 = +j
    5956 +keycode 46 = m
    5957 +       shiftr keycode 46 = +M
    5958 +       shift shiftr keycode 46 = +m
    5959 +keycode 47 = n
    5960 +       shiftr keycode 47 = +N
    5961 +       shift shiftr keycode 47 = +n
    5962 +
    5963 +# This is the "Backspace" key:
    5964 +keycode 49 = Delete Delete
    5965 +       shiftr keycode 49 = Delete
    5966 +       shift shiftr keycode 49 = Delete
    5967 +       control keycode 49 = BackSpace
    5968 +       alt keycode 49 = Meta_Delete
    5969 +keycode 50 = Num_Lock
    5970 +       shift keycode 50 = Bare_Num_Lock
    5971 +       shiftr keycode 50 = Bare_Num_Lock
    5972 +       shift shiftr keycode 50 = Bare_Num_Lock
    5973 +# This is the "Delete" key:
    5974 +keycode 51 = Remove
    5975 +       control alt keycode 51 = Boot
    5976 +
    5977 +keycode 53 = backslash bar
    5978 +       shiftr keycode 53 = bar
    5979 +       shift shiftr keycode 53 = bar
    5980 +       control keycode 53 = Control_backslash
    5981 +       alt keycode 53 = Meta_backslash
    5982 +keycode 54 = Return
    5983 +       alt keycode 54 = Meta_Control_m
    5984 +keycode 55 = space space           
    5985 +       shiftr keycode 55 = space
    5986 +       shift shiftr keycode 55 = space
    5987 +       control keycode 55 = nul
    5988 +       alt keycode 55 = Meta_space
    5989 +keycode 56 = g
    5990 +       shiftr keycode 56 = +G
    5991 +       shift shiftr keycode 56 = +g
    5992 +keycode 57 = t
    5993 +       shiftr keycode 57 = +T
    5994 +       shift shiftr keycode 57 = +t
    5995 +keycode 58 = five percent
    5996 +       shiftr keycode 58 = percent
    5997 +       shift shiftr keycode 58 = percent
    5998 +       control keycode 58 = Control_bracketright
    5999 +       alt keycode 58 = Meta_five
    6000 +keycode 59 = four dollar dollar
    6001 +       shiftr keycode 59 = dollar
    6002 +       shift shiftr keycode 59 = dollar
    6003 +       control keycode 59 = Control_backslash
    6004 +       alt keycode 59 = Meta_four
    6005 +keycode 60 = r
    6006 +       shiftr keycode 60 = +R
    6007 +       shift shiftr keycode 60 = +r
    6008 +keycode 61 = f
    6009 +       shiftr keycode 61 = +F
    6010 +       shift shiftr keycode 61 = +f
    6011 +       altgr keycode 61 = Hex_F
    6012 +keycode 62 = v
    6013 +       shiftr keycode 62 = +V
    6014 +       shift shiftr keycode 62 = +v
    6015 +keycode 63 = b
    6016 +       shiftr keycode 63 = +B
    6017 +       shift shiftr keycode 63 = +b
    6018 +       altgr keycode 63 = Hex_B
    6019 +
    6020 +keycode 67 = three numbersign
    6021 +       shiftr keycode 67 = numbersign
    6022 +       shift shiftr keycode 67 = numbersign
    6023 +       control keycode 67 = Escape
    6024 +       alt keycode 67 = Meta_three
    6025 +keycode 68 = e
    6026 +       shiftr keycode 68 = +E
    6027 +       shift shiftr keycode 68 = +e
    6028 +       altgr keycode 68 = Hex_E
    6029 +keycode 69 = d
    6030 +       shiftr keycode 69 = +D
    6031 +       shift shiftr keycode 69 = +d
    6032 +       altgr keycode 69 = Hex_D
    6033 +keycode 70 = c
    6034 +       shiftr keycode 70 = +C
    6035 +       shift shiftr keycode 70 = +c
    6036 +       altgr keycode 70 = Hex_C
    6037 +keycode 71 = Right Incr_Console
    6038 +       shiftr keycode 71 = Incr_Console
    6039 +       shift shiftr keycode 71 = Incr_Console
    6040 +       alt keycode 71 = End
    6041 +
    6042 +keycode 75 = two at at
    6043 +       shiftr keycode 75 = at
    6044 +       shift shiftr keycode 75 = at
    6045 +       control keycode 75 = nul
    6046 +       shift control keycode 75 = nul
    6047 +       shiftr control keycode 75 = nul
    6048 +       shift shiftr control keycode 75 = nul
    6049 +       alt keycode 75 = Meta_two
    6050 +keycode 76 = w
    6051 +       shiftr keycode 76 = +W
    6052 +       shift shiftr keycode 76 = +w
    6053 +keycode 77 = s
    6054 +       shiftr keycode 77 = +S
    6055 +       shift shiftr keycode 77 = +s
    6056 +keycode 78 = x
    6057 +       shiftr keycode 78 = +X
    6058 +       shift shiftr keycode 78 = +x
    6059 +keycode 79 = Down Scroll_Forward
    6060 +       shiftr keycode 79 = Scroll_Forward
    6061 +       shift shiftr keycode 79 = Scroll_Forward
    6062 +       alt keycode 79 = Next
    6063 +keycode 80 = Escape Escape
    6064 +       shiftr keycode 80 = Escape
    6065 +       shift shiftr keycode 80 = Escape
    6066 +       alt keycode 80 = Meta_Escape
    6067 +keycode 81 = Tab Tab             
    6068 +       shiftr keycode 81 = Tab
    6069 +       shift shiftr keycode 81 = Tab
    6070 +       alt keycode 81 = Meta_Tab
    6071 +keycode 82 = grave asciitilde
    6072 +       shiftr keycode 82 = asciitilde
    6073 +       shift shiftr keycode 82 = asciitilde
    6074 +       control keycode 82 = nul
    6075 +       alt keycode 82 = Meta_grave
    6076 +keycode 83 = one exclam
    6077 +       shiftr keycode 83 = exclam
    6078 +       shift shiftr keycode 83 = exclam
    6079 +       alt keycode 83 = Meta_one
    6080 +keycode 84 = q
    6081 +       shiftr keycode 84 = +Q
    6082 +       shift shiftr keycode 84 = +q
    6083 +keycode 85 = a
    6084 +       shiftr keycode 85 = +A
    6085 +       shift shiftr keycode 85 = +a
    6086 +       altgr keycode 85 = Hex_A
    6087 +keycode 86 = z
    6088 +       shiftr keycode 86 = +Z
    6089 +       shift shiftr keycode 86 = +z
    6090 +
    6091 +# This is the windows key:
    6092 +keycode 88 = Decr_Console
    6093 +keycode 89 = Shift
    6094 +keycode 90 = Control
    6095 +keycode 91 = Control
    6096 +keycode 92 = Alt
    6097 +keycode 93 = AltGr
    6098 +keycode 94 = ShiftR
    6099 +       shift keycode 94 = Caps_Lock
    6100 diff -Naur linux-2.6.17.13.orig/drivers/char/Kconfig linux-2.6.17.13/drivers/char/Kconfig
    6101 --- linux-2.6.17.13.orig/drivers/char/Kconfig   2006-09-08 20:23:25.000000000 -0700
    6102 +++ linux-2.6.17.13/drivers/char/Kconfig        2006-09-09 10:17:04.000000000 -0700
    6103 @@ -340,23 +340,68 @@
     5291diff -Naur linux-2.6.18/drivers/char/Kconfig linux-2.6.18.mips/drivers/char/Kconfig
     5292--- linux-2.6.18/drivers/char/Kconfig   2006-09-19 20:42:06.000000000 -0700
     5293+++ linux-2.6.18.mips/drivers/char/Kconfig      2006-09-20 06:55:21.000000000 -0700
     5294@@ -357,23 +357,68 @@
    61045295          To compile this driver as a module, choose M here: the
    61055296          module will be called istallion.
     
    61835374          Images of Qtronix keyboards are at
    61845375          <http://www.qtronix.com/keyboard.html>.
    6185 @@ -368,7 +413,7 @@
     5376@@ -385,7 +430,7 @@
    61865377 
    61875378 config IT8172_SCR0
     
    61925383          Say Y here to support smart-card reader 0 (SCR0) on the Integrated
    61935384          Technology Express, Inc. ITE8172 SBC.  Vendor page at
    6194 @@ -377,13 +422,17 @@
     5385@@ -394,13 +439,17 @@
    61955386 
    61965387 config IT8172_SCR1
     
    62115402        tristate "Commodore A2232 serial support (EXPERIMENTAL)"
    62125403        depends on EXPERIMENTAL && ZORRO && BROKEN_ON_SMP
    6213 diff -Naur linux-2.6.17.13.orig/drivers/char/Makefile linux-2.6.17.13/drivers/char/Makefile
    6214 --- linux-2.6.17.13.orig/drivers/char/Makefile  2006-09-08 20:23:25.000000000 -0700
    6215 +++ linux-2.6.17.13/drivers/char/Makefile       2006-09-09 10:17:04.000000000 -0700
     5404diff -Naur linux-2.6.18/drivers/char/Makefile linux-2.6.18.mips/drivers/char/Makefile
     5405--- linux-2.6.18/drivers/char/Makefile  2006-09-19 20:42:06.000000000 -0700
     5406+++ linux-2.6.18.mips/drivers/char/Makefile     2006-09-20 06:55:21.000000000 -0700
    62165407@@ -31,6 +31,7 @@
    62175408 obj-$(CONFIG_A2232)            += ser_a2232.o generic_serial.o
     
    62315422 obj-$(CONFIG_TIPAR)            += tipar.o
    62325423@@ -78,6 +80,10 @@
    6233  obj-$(CONFIG_HW_RANDOM)                += hw_random.o
     5424 obj-$(CONFIG_HW_RANDOM)                += hw_random/
    62345425 obj-$(CONFIG_FTAPE)            += ftape/
    62355426 obj-$(CONFIG_COBALT_LCD)       += lcd.o
     
    62415432 obj-$(CONFIG_NWBUTTON)         += nwbutton.o
    62425433 obj-$(CONFIG_NWFLASH)          += nwflash.o
    6243 diff -Naur linux-2.6.17.13.orig/drivers/char/qtronix.c linux-2.6.17.13/drivers/char/qtronix.c
    6244 --- linux-2.6.17.13.orig/drivers/char/qtronix.c 2006-09-08 20:23:25.000000000 -0700
    6245 +++ linux-2.6.17.13/drivers/char/qtronix.c      2006-09-09 10:17:04.000000000 -0700
    6246 @@ -535,8 +535,7 @@
     5434diff -Naur linux-2.6.18/drivers/char/qtronix.c linux-2.6.18.mips/drivers/char/qtronix.c
     5435--- linux-2.6.18/drivers/char/qtronix.c 2006-09-19 20:42:06.000000000 -0700
     5436+++ linux-2.6.18.mips/drivers/char/qtronix.c    2006-09-20 06:55:21.000000000 -0700
     5437@@ -534,8 +534,7 @@
    62475438                i--;
    62485439        }
     
    62545445        }
    62555446        if (signal_pending(current))
    6256 diff -Naur linux-2.6.17.13.orig/drivers/char/rtc.c linux-2.6.17.13/drivers/char/rtc.c
    6257 --- linux-2.6.17.13.orig/drivers/char/rtc.c     2006-09-08 20:23:25.000000000 -0700
    6258 +++ linux-2.6.17.13/drivers/char/rtc.c  2006-09-09 10:17:04.000000000 -0700
    6259 @@ -35,23 +35,22 @@
     5447diff -Naur linux-2.6.18/drivers/char/rtc.c linux-2.6.18.mips/drivers/char/rtc.c
     5448--- linux-2.6.18/drivers/char/rtc.c     2006-09-19 20:42:06.000000000 -0700
     5449+++ linux-2.6.18.mips/drivers/char/rtc.c        2006-09-20 06:55:21.000000000 -0700
     5450@@ -35,16 +35,16 @@
    62605451  *     1.09a   Pete Zaitcev: Sun SPARC
    62615452  *     1.09b   Jeff Garzik: Modularize, init cleanup
     
    62755466+ *     1.12    Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
    62765467  *             CONFIG_HPET_EMULATE_RTC
    6277 + *     1.12a   Maciej W. Rozycki: Handle memory-mapped chips properly.
     5468  *     1.12a   Maciej W. Rozycki: Handle memory-mapped chips properly.
    62785469  *     1.12ac  Alan Cox: Allow read access to the day of week register
    6279   */
    6280  
    6281 -#define RTC_VERSION            "1.12ac"
    6282 -
    6283 -#define RTC_IO_EXTENT  0x8
    6284 +#define RTC_VERSION            "1.12a"
    6285  
    6286  /*
    6287   *     Note that *all* calls to CMOS_READ and CMOS_WRITE are done with
    6288 @@ -338,7 +337,15 @@
    6289         if (rtc_has_irq == 0)
    6290                 return -EIO;
    6291  
    6292 -       if (count < sizeof(unsigned))
    6293 +       /*
    6294 +        * Historically this function used to assume that sizeof(unsigned long)
    6295 +        * is the same in userspace and kernelspace.  This lead to problems
    6296 +        * for configurations with multiple ABIs such a the MIPS o32 and 64
    6297 +        * ABIs supported on the same kernel.  So now we support read of both
    6298 +        * 4 and 8 bytes and assume that's the sizeof(unsigned long) in the
    6299 +        * userspace ABI.
    6300 +        */
    6301 +       if (count != sizeof(unsigned int) && count !=  sizeof(unsigned long))
    6302                 return -EINVAL;
    6303  
    6304         add_wait_queue(&rtc_wait, &wait);
    6305 @@ -369,10 +376,12 @@
    6306                 schedule();
    6307         } while (1);
    6308  
    6309 -       if (count < sizeof(unsigned long))
    6310 -               retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int);
    6311 +       if (count == sizeof(unsigned int))
    6312 +               retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int);
    6313         else
    6314                 retval = put_user(data, (unsigned long __user *)buf) ?: sizeof(long);
    6315 +       if (!retval)
    6316 +               retval = count;
    6317   out:
    6318         current->state = TASK_RUNNING;
    6319         remove_wait_queue(&rtc_wait, &wait);
    6320 @@ -924,6 +933,9 @@
    6321         struct sparc_isa_device *isa_dev;
    6322  #endif
    6323  #endif
    6324 +#ifndef __sparc__
    6325 +       void *r;
    6326 +#endif
    6327  
    6328  #ifdef __sparc__
    6329         for_each_ebus(ebus) {
    6330 @@ -969,8 +981,13 @@
    6331         }
    6332  no_irq:
    6333  #else
    6334 -       if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc")) {
    6335 -               printk(KERN_ERR "rtc: I/O port %d is not free.\n", RTC_PORT (0));
    6336 +       if (RTC_IOMAPPED)
    6337 +               r = request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
    6338 +       else
    6339 +               r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
    6340 +       if (!r) {
    6341 +               printk(KERN_ERR "rtc: I/O resource %lx is not free.\n",
    6342 +                      (long)(RTC_PORT(0)));
    6343                 return -EIO;
    6344         }
    6345  
    6346 @@ -984,7 +1001,10 @@
    6347         if(request_irq(RTC_IRQ, rtc_int_handler_ptr, SA_INTERRUPT, "rtc", NULL)) {
    6348                 /* Yeah right, seeing as irq 8 doesn't even hit the bus. */
    6349                 printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ);
    6350 -               release_region(RTC_PORT(0), RTC_IO_EXTENT);
    6351 +               if (RTC_IOMAPPED)
    6352 +                       release_region(RTC_PORT(0), RTC_IO_EXTENT);
    6353 +               else
    6354 +                       release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
    6355                 return -EIO;
    6356         }
    6357         hpet_rtc_timer_init();
    6358 @@ -1084,7 +1104,10 @@
    6359         if (rtc_has_irq)
    6360                 free_irq (rtc_irq, &rtc_port);
    6361  #else
    6362 -       release_region (RTC_PORT (0), RTC_IO_EXTENT);
    6363 +       if (RTC_IOMAPPED)
    6364 +               release_region(RTC_PORT(0), RTC_IO_EXTENT);
    6365 +       else
    6366 +               release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
    6367  #ifdef RTC_IRQ
    6368         if (rtc_has_irq)
    6369                 free_irq (RTC_IRQ, NULL);
    6370 diff -Naur linux-2.6.17.13.orig/drivers/char/sb1250_duart.c linux-2.6.17.13/drivers/char/sb1250_duart.c
    6371 --- linux-2.6.17.13.orig/drivers/char/sb1250_duart.c    1969-12-31 16:00:00.000000000 -0800
    6372 +++ linux-2.6.17.13/drivers/char/sb1250_duart.c 2006-09-09 10:17:04.000000000 -0700
    6373 @@ -0,0 +1,911 @@
     5470diff -Naur linux-2.6.18/drivers/char/sb1250_duart.c linux-2.6.18.mips/drivers/char/sb1250_duart.c
     5471--- linux-2.6.18/drivers/char/sb1250_duart.c    1969-12-31 16:00:00.000000000 -0800
     5472+++ linux-2.6.18.mips/drivers/char/sb1250_duart.c       2006-09-20 06:55:21.000000000 -0700
     5473@@ -0,0 +1,910 @@
    63745474+/*
    63755475+ * Copyright (C) 2000,2001,2002,2003,2004 Broadcom Corporation
     
    71376237+       sb1250_duart_driver->owner = THIS_MODULE;
    71386238+       sb1250_duart_driver->name = "duart";
    7139 +       sb1250_duart_driver->devfs_name = "duart/";
    71406239+       sb1250_duart_driver->major = TTY_MAJOR;
    71416240+       sb1250_duart_driver->minor_start = SB1250_DUART_MINOR_BASE;
     
    72836382+
    72846383+#endif /* CONFIG_SIBYTE_SB1250_DUART_CONSOLE */
    7285 diff -Naur linux-2.6.17.13.orig/drivers/ide/mips/Makefile linux-2.6.17.13/drivers/ide/mips/Makefile
    7286 --- linux-2.6.17.13.orig/drivers/ide/mips/Makefile      2006-09-08 20:23:25.000000000 -0700
    7287 +++ linux-2.6.17.13/drivers/ide/mips/Makefile   2006-09-09 10:17:04.000000000 -0700
     6384diff -Naur linux-2.6.18/drivers/ide/mips/Makefile linux-2.6.18.mips/drivers/ide/mips/Makefile
     6385--- linux-2.6.18/drivers/ide/mips/Makefile      2006-09-19 20:42:06.000000000 -0700
     6386+++ linux-2.6.18.mips/drivers/ide/mips/Makefile 2006-09-20 06:55:21.000000000 -0700
    72886387@@ -1,4 +1,4 @@
    72896388 obj-$(CONFIG_BLK_DEV_IDE_SWARM)                += swarm.o
     
    72926391-EXTRA_CFLAGS    := -Idrivers/ide
    72936392+CFLAGS_au1xxx-ide.o := -Idrivers/ide
    7294 diff -Naur linux-2.6.17.13.orig/drivers/mtd/devices/docprobe.c linux-2.6.17.13/drivers/mtd/devices/docprobe.c
    7295 --- linux-2.6.17.13.orig/drivers/mtd/devices/docprobe.c 2006-09-08 20:23:25.000000000 -0700
    7296 +++ linux-2.6.17.13/drivers/mtd/devices/docprobe.c      2006-09-09 10:17:04.000000000 -0700
    7297 @@ -84,10 +84,10 @@
     6393diff -Naur linux-2.6.18/drivers/mtd/devices/docprobe.c linux-2.6.18.mips/drivers/mtd/devices/docprobe.c
     6394--- linux-2.6.18/drivers/mtd/devices/docprobe.c 2006-09-19 20:42:06.000000000 -0700
     6395+++ linux-2.6.18.mips/drivers/mtd/devices/docprobe.c    2006-09-20 06:55:21.000000000 -0700
     6396@@ -83,10 +83,10 @@
    72986397        0xe4000000,
    72996398 #elif defined(CONFIG_MOMENCO_OCELOT)
     
    73096408 #endif
    73106409        0xffffffff };
    7311 diff -Naur linux-2.6.17.13.orig/drivers/mtd/devices/Kconfig linux-2.6.17.13/drivers/mtd/devices/Kconfig
    7312 --- linux-2.6.17.13.orig/drivers/mtd/devices/Kconfig    2006-09-08 20:23:25.000000000 -0700
    7313 +++ linux-2.6.17.13/drivers/mtd/devices/Kconfig 2006-09-09 10:17:04.000000000 -0700
    7314 @@ -47,6 +47,11 @@
    7315           accelerator.  Say Y here if you have a DECstation 5000/2x0 or a
    7316           DECsystem 5900 equipped with such a module.
    7317  
    7318 +         If you want to compile this driver as a module ( = code which can be
    7319 +         inserted in and removed from the running kernel whenever you want),
    7320 +         say M here and read <file:Documentation/modules.txt>.  The module will
    7321 +         be called ms02-nv.o.
    7322 +
    7323  config MTD_DATAFLASH
    7324         tristate "Support for AT45xxx DataFlash"
    7325         depends on MTD && SPI_MASTER && EXPERIMENTAL
    7326 diff -Naur linux-2.6.17.13.orig/drivers/mtd/maps/Kconfig linux-2.6.17.13/drivers/mtd/maps/Kconfig
    7327 --- linux-2.6.17.13.orig/drivers/mtd/maps/Kconfig       2006-09-08 20:23:25.000000000 -0700
    7328 +++ linux-2.6.17.13/drivers/mtd/maps/Kconfig    2006-09-09 10:17:04.000000000 -0700
    7329 @@ -200,8 +200,8 @@
    7330           Support for the flash chip on Tsunami TIG bus.
    7331  
    7332  config MTD_LASAT
    7333 -       tristate "Flash chips on LASAT board"
    7334 -       depends on LASAT
    7335 +       tristate "LASAT flash device"
    7336 +       depends on LASAT && MTD_CFI
    7337         help
    7338           Support for the flash chips on the Lasat 100 and 200 boards.
    7339  
     6410diff -Naur linux-2.6.18/drivers/mtd/maps/Kconfig linux-2.6.18.mips/drivers/mtd/maps/Kconfig
     6411--- linux-2.6.18/drivers/mtd/maps/Kconfig       2006-09-19 20:42:06.000000000 -0700
     6412+++ linux-2.6.18.mips/drivers/mtd/maps/Kconfig  2006-09-20 06:55:21.000000000 -0700
    73406413@@ -299,6 +299,18 @@
    73416414          Mapping for the Flaga digital module. If you don't have one, ignore
     
    73576430        tristate "CFI Flash device mapped on IBM 405LP Beech"
    73586431        depends on MTD_CFI && BEECH
    7359 diff -Naur linux-2.6.17.13.orig/drivers/mtd/maps/lasat.c linux-2.6.17.13/drivers/mtd/maps/lasat.c
    7360 --- linux-2.6.17.13.orig/drivers/mtd/maps/lasat.c       2006-09-08 20:23:25.000000000 -0700
    7361 +++ linux-2.6.17.13/drivers/mtd/maps/lasat.c    2006-09-09 10:17:04.000000000 -0700
     6432diff -Naur linux-2.6.18/drivers/mtd/maps/lasat.c linux-2.6.18.mips/drivers/mtd/maps/lasat.c
     6433--- linux-2.6.18/drivers/mtd/maps/lasat.c       2006-09-19 20:42:06.000000000 -0700
     6434+++ linux-2.6.18.mips/drivers/mtd/maps/lasat.c  2006-09-20 06:55:21.000000000 -0700
    73626435@@ -7,7 +7,7 @@
    73636436  * modify it under the terms of the GNU General Public License version
     
    73696442  */
    73706443 
    7371 @@ -50,7 +50,7 @@
     6444@@ -49,7 +49,7 @@
    73726445        ENABLE_VPP((&lasat_map));
    73736446 
     
    73786451        lasat_map.size = lasat_board_info.li_flash_size;
    73796452 
    7380 diff -Naur linux-2.6.17.13.orig/drivers/net/big_sur_ge.c linux-2.6.17.13/drivers/net/big_sur_ge.c
    7381 --- linux-2.6.17.13.orig/drivers/net/big_sur_ge.c       1969-12-31 16:00:00.000000000 -0800
    7382 +++ linux-2.6.17.13/drivers/net/big_sur_ge.c    2006-09-09 10:17:04.000000000 -0700
     6453diff -Naur linux-2.6.18/drivers/net/big_sur_ge.c linux-2.6.18.mips/drivers/net/big_sur_ge.c
     6454--- linux-2.6.18/drivers/net/big_sur_ge.c       1969-12-31 16:00:00.000000000 -0800
     6455+++ linux-2.6.18.mips/drivers/net/big_sur_ge.c  2006-09-20 06:55:21.000000000 -0700
    73836456@@ -0,0 +1,2005 @@
    73846457+/*
     
    93878460+MODULE_DESCRIPTION("PMC-Sierra Big Sur Ethernet MAC Driver");
    93888461+MODULE_LICENSE("GPL");
    9389 diff -Naur linux-2.6.17.13.orig/drivers/net/big_sur_ge.h linux-2.6.17.13/drivers/net/big_sur_ge.h
    9390 --- linux-2.6.17.13.orig/drivers/net/big_sur_ge.h       1969-12-31 16:00:00.000000000 -0800
    9391 +++ linux-2.6.17.13/drivers/net/big_sur_ge.h    2006-09-09 10:17:04.000000000 -0700
     8462diff -Naur linux-2.6.18/drivers/net/big_sur_ge.h linux-2.6.18.mips/drivers/net/big_sur_ge.h
     8463--- linux-2.6.18/drivers/net/big_sur_ge.h       1969-12-31 16:00:00.000000000 -0800
     8464+++ linux-2.6.18.mips/drivers/net/big_sur_ge.h  2006-09-20 06:55:21.000000000 -0700
    93928465@@ -0,0 +1,713 @@
    93938466+/*
     
    101049177+
    101059178+#endif
    10106 diff -Naur linux-2.6.17.13.orig/drivers/net/declance.c linux-2.6.17.13/drivers/net/declance.c
    10107 --- linux-2.6.17.13.orig/drivers/net/declance.c 2006-09-08 20:23:25.000000000 -0700
    10108 +++ linux-2.6.17.13/drivers/net/declance.c      2006-09-09 10:17:04.000000000 -0700
    10109 @@ -704,8 +704,8 @@
    10110         return IRQ_HANDLED;
    10111  }
    10112  
    10113 -static irqreturn_t
    10114 -lance_interrupt(const int irq, void *dev_id, struct pt_regs *regs)
    10115 +static irqreturn_t lance_interrupt(const int irq, void *dev_id,
    10116 +                                  struct pt_regs *regs)
    10117  {
    10118         struct net_device *dev = (struct net_device *) dev_id;
    10119         struct lance_private *lp = netdev_priv(dev);
    10120 @@ -1255,7 +1255,7 @@
    10121         return 0;
    10122  
    10123  err_out_free_dev:
    10124 -       kfree(dev);
    10125 +       free_netdev(dev);
    10126  
    10127  err_out:
    10128         return ret;
    10129 @@ -1301,6 +1301,7 @@
    10130         while (root_lance_dev) {
    10131                 struct net_device *dev = root_lance_dev;
    10132                 struct lance_private *lp = netdev_priv(dev);
    10133 +
    10134                 unregister_netdev(dev);
    10135  #ifdef CONFIG_TC
    10136                 if (lp->slot >= 0)
    10137 diff -Naur linux-2.6.17.13.orig/drivers/net/gt64240eth.c linux-2.6.17.13/drivers/net/gt64240eth.c
    10138 --- linux-2.6.17.13.orig/drivers/net/gt64240eth.c       1969-12-31 16:00:00.000000000 -0800
    10139 +++ linux-2.6.17.13/drivers/net/gt64240eth.c    2006-09-09 10:17:04.000000000 -0700
     9179diff -Naur linux-2.6.18/drivers/net/gt64240eth.c linux-2.6.18.mips/drivers/net/gt64240eth.c
     9180--- linux-2.6.18/drivers/net/gt64240eth.c       1969-12-31 16:00:00.000000000 -0800
     9181+++ linux-2.6.18.mips/drivers/net/gt64240eth.c  2006-09-20 06:55:21.000000000 -0700
    101409182@@ -0,0 +1,1672 @@
    101419183+/*
     
    1181110853+       return &gp->stats;
    1181210854+}
    11813 diff -Naur linux-2.6.17.13.orig/drivers/net/gt64240eth.h linux-2.6.17.13/drivers/net/gt64240eth.h
    11814 --- linux-2.6.17.13.orig/drivers/net/gt64240eth.h       2006-09-08 20:23:25.000000000 -0700
    11815 +++ linux-2.6.17.13/drivers/net/gt64240eth.h    2006-09-09 10:17:04.000000000 -0700
     10855diff -Naur linux-2.6.18/drivers/net/gt64240eth.h linux-2.6.18.mips/drivers/net/gt64240eth.h
     10856--- linux-2.6.18/drivers/net/gt64240eth.h       2006-09-19 20:42:06.000000000 -0700
     10857+++ linux-2.6.18.mips/drivers/net/gt64240eth.h  2006-09-20 06:55:21.000000000 -0700
    1181610858@@ -9,6 +9,7 @@
    1181710859  * Copyright 2000 MontaVista Software Inc.
     
    1185410896 /* Bit definitions of the SMI Reg */
    1185510897 enum {
    11856 diff -Naur linux-2.6.17.13.orig/drivers/net/Kconfig linux-2.6.17.13/drivers/net/Kconfig
    11857 --- linux-2.6.17.13.orig/drivers/net/Kconfig    2006-09-08 20:23:25.000000000 -0700
    11858 +++ linux-2.6.17.13/drivers/net/Kconfig 2006-09-09 10:17:04.000000000 -0700
     10898diff -Naur linux-2.6.18/drivers/net/ioc3-eth.c linux-2.6.18.mips/drivers/net/ioc3-eth.c
     10899--- linux-2.6.18/drivers/net/ioc3-eth.c 2006-09-19 20:42:06.000000000 -0700
     10900+++ linux-2.6.18.mips/drivers/net/ioc3-eth.c    2006-09-20 06:55:21.000000000 -0700
     10901@@ -5,7 +5,7 @@
     10902  *
     10903  * Driver for SGI's IOC3 based Ethernet cards as found in the PCI card.
     10904  *
     10905- * Copyright (C) 1999, 2000, 2001, 2003 Ralf Baechle
     10906+ * Copyright (C) 1999, 2000, 01, 03, 06 Ralf Baechle
     10907  * Copyright (C) 1995, 1999, 2000, 2001 by Silicon Graphics, Inc.
     10908  *
     10909  * References:
     10910@@ -62,12 +62,7 @@
     10911 #include <asm/pgtable.h>
     10912 #include <asm/uaccess.h>
     10913 #include <asm/sn/types.h>
     10914-#include <asm/sn/sn0/addrs.h>
     10915-#include <asm/sn/sn0/hubni.h>
     10916-#include <asm/sn/sn0/hubio.h>
     10917-#include <asm/sn/klconfig.h>
     10918 #include <asm/sn/ioc3.h>
     10919-#include <asm/sn/sn0/ip27.h>
     10920 #include <asm/pci/bridge.h>
     10921 
     10922 /*
     10923@@ -95,6 +90,9 @@
     10924        u32 emcr, ehar_h, ehar_l;
     10925        spinlock_t ioc3_lock;
     10926        struct mii_if_info mii;
     10927+       unsigned long flags;
     10928+#define IOC3_FLAG_RX_CHECKSUMS 1
     10929+
     10930        struct pci_dev *pdev;
     10931 
     10932        /* Members used by autonegotiation  */
     10933@@ -522,8 +520,6 @@
     10934        return &ip->stats;
     10935 }
     10936 
     10937-#ifdef CONFIG_SGI_IOC3_ETH_HW_RX_CSUM
     10938-
     10939 static void ioc3_tcpudp_checksum(struct sk_buff *skb, uint32_t hwsum, int len)
     10940 {
     10941        struct ethhdr *eh = eth_hdr(skb);
     10942@@ -591,7 +587,6 @@
     10943        if (csum == 0xffff)
     10944                skb->ip_summed = CHECKSUM_UNNECESSARY;
     10945 }
     10946-#endif /* CONFIG_SGI_IOC3_ETH_HW_RX_CSUM */
     10947 
     10948 static inline void ioc3_rx(struct ioc3_private *ip)
     10949 {
     10950@@ -626,9 +621,9 @@
     10951                                goto next;
     10952                        }
     10953 
     10954-#ifdef CONFIG_SGI_IOC3_ETH_HW_RX_CSUM
     10955-                       ioc3_tcpudp_checksum(skb, w0 & ERXBUF_IPCKSUM_MASK,len);
     10956-#endif
     10957+                       if (likely(ip->flags & IOC3_FLAG_RX_CHECKSUMS))
     10958+                               ioc3_tcpudp_checksum(skb,
     10959+                                       w0 & ERXBUF_IPCKSUM_MASK, len);
     10960 
     10961                        netif_rx(skb);
     10962 
     10963@@ -1289,9 +1284,7 @@
     10964        dev->set_multicast_list = ioc3_set_multicast_list;
     10965        dev->set_mac_address    = ioc3_set_mac_address;
     10966        dev->ethtool_ops        = &ioc3_ethtool_ops;
     10967-#ifdef CONFIG_SGI_IOC3_ETH_HW_TX_CSUM
     10968        dev->features           = NETIF_F_IP_CSUM;
     10969-#endif
     10970 
     10971        sw_physid1 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID1);
     10972        sw_physid2 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID2);
     10973@@ -1378,7 +1371,6 @@
     10974        uint32_t w0 = 0;
     10975        int produce;
     10976 
     10977-#ifdef CONFIG_SGI_IOC3_ETH_HW_TX_CSUM
     10978        /*
     10979         * IOC3 has a fairly simple minded checksumming hardware which simply
     10980         * adds up the 1's complement checksum for the entire packet and
     10981@@ -1426,7 +1418,6 @@
     10982 
     10983                w0 = ETXD_DOCHECKSUM | (csoff << ETXD_CHKOFF_SHIFT);
     10984        }
     10985-#endif /* CONFIG_SGI_IOC3_ETH_HW_TX_CSUM */
     10986 
     10987        spin_lock_irq(&ip->ioc3_lock);
     10988 
     10989@@ -1580,12 +1571,37 @@
     10990        return rc;
     10991 }
     10992 
     10993+static u32 ioc3_get_rx_csum(struct net_device *dev)
     10994+{
     10995+       struct ioc3_private *ip = netdev_priv(dev);
     10996+
     10997+       return ip->flags & IOC3_FLAG_RX_CHECKSUMS;
     10998+}
     10999+
     11000+static int ioc3_set_rx_csum(struct net_device *dev, u32 data)
     11001+{
     11002+       struct ioc3_private *ip = netdev_priv(dev);
     11003+
     11004+       spin_lock_bh(&ip->ioc3_lock);
     11005+       if (data)
     11006+               ip->flags |= IOC3_FLAG_RX_CHECKSUMS;
     11007+       else
     11008+               ip->flags &= ~IOC3_FLAG_RX_CHECKSUMS;
     11009+       spin_unlock_bh(&ip->ioc3_lock);
     11010+
     11011+       return 0;
     11012+}
     11013+
     11014 static struct ethtool_ops ioc3_ethtool_ops = {
     11015        .get_drvinfo            = ioc3_get_drvinfo,
     11016        .get_settings           = ioc3_get_settings,
     11017        .set_settings           = ioc3_set_settings,
     11018        .nway_reset             = ioc3_nway_reset,
     11019        .get_link               = ioc3_get_link,
     11020+       .get_rx_csum            = ioc3_get_rx_csum,
     11021+       .set_rx_csum            = ioc3_set_rx_csum,
     11022+       .get_tx_csum            = ethtool_op_get_tx_csum,
     11023+       .set_tx_csum            = ethtool_op_set_tx_csum
     11024 };
     11025 
     11026 static int ioc3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
     11027diff -Naur linux-2.6.18/drivers/net/Kconfig linux-2.6.18.mips/drivers/net/Kconfig
     11028--- linux-2.6.18/drivers/net/Kconfig    2006-09-19 20:42:06.000000000 -0700
     11029+++ linux-2.6.18.mips/drivers/net/Kconfig       2006-09-20 06:55:21.000000000 -0700
    1185911030@@ -438,6 +438,14 @@
    1186011031          This is the driver for the onboard card of MIPS Magnum 4000,
     
    1187211043        bool "MIPS GT96100 Ethernet support"
    1187311044        depends on NET_ETHERNET && MIPS_GT96100
    11874 @@ -452,10 +460,6 @@
     11045@@ -453,10 +461,6 @@
    1187511046          If you have an Alchemy Semi AU1X00 based system
    1187611047          say Y.  Otherwise, say N.
     
    1188311054        bool "SGI IOC3 Ethernet"
    1188411055        depends on NET_ETHERNET && PCI && SGI_IP27
    11885 @@ -494,6 +498,14 @@
    11886           emulated by the MIPS Simulator.
    11887           If you are not using a MIPSsim or are unsure, say N.
    11888  
     11056@@ -467,25 +471,13 @@
     11057          the Ethernet-HOWTO, available from
     11058          <http://www.tldp.org/docs.html#howto>.
     11059 
     11060-config SGI_IOC3_ETH_HW_RX_CSUM
     11061-       bool "Receive hardware checksums"
     11062-       depends on SGI_IOC3_ETH && INET
     11063-       default y
     11064-       help
     11065-         The SGI IOC3 network adapter supports TCP and UDP checksums in
     11066-         hardware to offload processing of these checksums from the CPU.  At
     11067-         the moment only acceleration of IPv4 is supported.  This option
     11068-         enables offloading for checksums on receive.  If unsure, say Y.
     11069-
     11070-config SGI_IOC3_ETH_HW_TX_CSUM
     11071-       bool "Transmit hardware checksums"
     11072-       depends on SGI_IOC3_ETH && INET
     11073-       default y
    1188911074+config MIPS_SIM_NET
    1189011075+       tristate "MIPS simulator Network device (EXPERIMENTAL)"
    1189111076+       depends on NETDEVICES && MIPS_SIM && EXPERIMENTAL
    11892 +       help
     11077        help
     11078-         The SGI IOC3 network adapter supports TCP and UDP checksums in
     11079-         hardware to offload processing of these checksums from the CPU.  At
     11080-         the moment only acceleration of IPv4 is supported.  This option
     11081-         enables offloading for checksums on transmit.  If unsure, say Y.
    1189311082+         The MIPSNET device is a simple Ethernet network device which is
    1189411083+         emulated by the MIPS Simulator.
    1189511084+         If you are not using a MIPSsim or are unsure, say N.
    11896 +
    11897  config SGI_O2MACE_ETH
    11898         tristate "SGI O2 MACE Fast Ethernet support"
    11899         depends on NET_ETHERNET && SGI_IP32=y
    11900 @@ -1993,6 +2005,10 @@
     11085 
     11086 config MIPS_SIM_NET
     11087        tristate "MIPS simulator Network device (EXPERIMENTAL)"
     11088@@ -2035,6 +2027,10 @@
    1190111089 
    1190211090          If in doubt, say N.
     
    1190911097        bool "VLAN support"
    1191011098        depends on R8169 && VLAN_8021Q
    11911 @@ -2195,8 +2211,8 @@
     11099@@ -2266,8 +2262,8 @@
    1191211100        select MII
    1191311101        help
     
    1192011108 config MV643XX_ETH_0
    1192111109        bool "MV-643XX Port 0"
    11922 @@ -2219,6 +2235,20 @@
     11110@@ -2290,6 +2286,20 @@
    1192311111          This enables support for Port 2 of the Marvell MV643XX Gigabit
    1192411112          Ethernet.
     
    1194111129 
    1194211130 #
    11943 diff -Naur linux-2.6.17.13.orig/drivers/net/Makefile linux-2.6.17.13/drivers/net/Makefile
    11944 --- linux-2.6.17.13.orig/drivers/net/Makefile   2006-09-08 20:23:25.000000000 -0700
    11945 +++ linux-2.6.17.13/drivers/net/Makefile        2006-09-09 10:17:04.000000000 -0700
    11946 @@ -111,6 +111,11 @@
     11131diff -Naur linux-2.6.18/drivers/net/Makefile linux-2.6.18.mips/drivers/net/Makefile
     11132--- linux-2.6.18/drivers/net/Makefile   2006-09-19 20:42:06.000000000 -0700
     11133+++ linux-2.6.18.mips/drivers/net/Makefile      2006-09-20 06:55:21.000000000 -0700
     11134@@ -114,6 +114,11 @@
    1194711135 
    1194811136 obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
     
    1195611144 obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
    1195711145 obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
    11958 diff -Naur linux-2.6.17.13.orig/drivers/net/sb1250-mac.c linux-2.6.17.13/drivers/net/sb1250-mac.c
    11959 --- linux-2.6.17.13.orig/drivers/net/sb1250-mac.c       2006-09-08 20:23:25.000000000 -0700
    11960 +++ linux-2.6.17.13/drivers/net/sb1250-mac.c    2006-09-09 10:17:04.000000000 -0700
    11961 @@ -156,6 +156,10 @@
    11962  
    11963  #define NUMCACHEBLKS(x) (((x)+SMP_CACHE_BYTES-1)/SMP_CACHE_BYTES)
    11964  
    11965 +#define SBMAC_READCSR(t)       __raw_readq((unsigned long)t)
    11966 +#define SBMAC_WRITECSR(t,v)    __raw_writeq(v, (unsigned long)t)
    11967 +
    11968 +
    11969  #define SBMAC_MAX_TXDESCR      32
    11970  #define SBMAC_MAX_RXDESCR      32
    11971  
    11972 @@ -2416,6 +2420,11 @@
    11973                         sc->sbm_dev->name);
    11974         }
    11975  
    11976 +       if (periph_rev >= 2) {
    11977 +               printk(KERN_INFO "%s: enabling TCP rcv checksum\n",
    11978 +                       sc->sbm_dev->name);
    11979 +       }
    11980 +
    11981         /*
    11982          * Display Ethernet address (this is called during the config
    11983          * process so we need to finish off the config message that
    11984 diff -Naur linux-2.6.17.13.orig/drivers/net/titan_ge.c linux-2.6.17.13/drivers/net/titan_ge.c
    11985 --- linux-2.6.17.13.orig/drivers/net/titan_ge.c 1969-12-31 16:00:00.000000000 -0800
    11986 +++ linux-2.6.17.13/drivers/net/titan_ge.c      2006-09-09 10:17:04.000000000 -0700
     11146diff -Naur linux-2.6.18/drivers/net/titan_ge.c linux-2.6.18.mips/drivers/net/titan_ge.c
     11147--- linux-2.6.18/drivers/net/titan_ge.c 1969-12-31 16:00:00.000000000 -0800
     11148+++ linux-2.6.18.mips/drivers/net/titan_ge.c    2006-09-20 06:55:21.000000000 -0700
    1198711149@@ -0,0 +1,2071 @@
    1198811150+/*
     
    1405713219+module_init(titan_ge_init_module);
    1405813220+module_exit(titan_ge_cleanup_module);
    14059 diff -Naur linux-2.6.17.13.orig/drivers/net/titan_ge.h linux-2.6.17.13/drivers/net/titan_ge.h
    14060 --- linux-2.6.17.13.orig/drivers/net/titan_ge.h 1969-12-31 16:00:00.000000000 -0800
    14061 +++ linux-2.6.17.13/drivers/net/titan_ge.h      2006-09-09 10:17:04.000000000 -0700
     13221diff -Naur linux-2.6.18/drivers/net/titan_ge.h linux-2.6.18.mips/drivers/net/titan_ge.h
     13222--- linux-2.6.18/drivers/net/titan_ge.h 1969-12-31 16:00:00.000000000 -0800
     13223+++ linux-2.6.18.mips/drivers/net/titan_ge.h    2006-09-20 06:55:21.000000000 -0700
    1406213224@@ -0,0 +1,417 @@
    1406313225+#ifndef _TITAN_GE_H_
     
    1447813640+#endif                                 /* _TITAN_GE_H_ */
    1447913641+
    14480 diff -Naur linux-2.6.17.13.orig/drivers/net/titan_mdio.c linux-2.6.17.13/drivers/net/titan_mdio.c
    14481 --- linux-2.6.17.13.orig/drivers/net/titan_mdio.c       1969-12-31 16:00:00.000000000 -0800
    14482 +++ linux-2.6.17.13/drivers/net/titan_mdio.c    2006-09-09 10:17:04.000000000 -0700
     13642diff -Naur linux-2.6.18/drivers/net/titan_mdio.c linux-2.6.18.mips/drivers/net/titan_mdio.c
     13643--- linux-2.6.18/drivers/net/titan_mdio.c       1969-12-31 16:00:00.000000000 -0800
     13644+++ linux-2.6.18.mips/drivers/net/titan_mdio.c  2006-09-20 06:55:21.000000000 -0700
    1448313645@@ -0,0 +1,217 @@
    1448413646+/*
     
    1469913861+}
    1470013862+
    14701 diff -Naur linux-2.6.17.13.orig/drivers/net/titan_mdio.h linux-2.6.17.13/drivers/net/titan_mdio.h
    14702 --- linux-2.6.17.13.orig/drivers/net/titan_mdio.h       1969-12-31 16:00:00.000000000 -0800
    14703 +++ linux-2.6.17.13/drivers/net/titan_mdio.h    2006-09-09 10:17:04.000000000 -0700
     13863diff -Naur linux-2.6.18/drivers/net/titan_mdio.h linux-2.6.18.mips/drivers/net/titan_mdio.h
     13864--- linux-2.6.18/drivers/net/titan_mdio.h       1969-12-31 16:00:00.000000000 -0800
     13865+++ linux-2.6.18.mips/drivers/net/titan_mdio.h  2006-09-20 06:55:21.000000000 -0700
    1470413866@@ -0,0 +1,56 @@
    1470513867+/*
     
    1475913921+
    1476013922+#endif /* _TITAN_MDIO_H */
    14761 diff -Naur linux-2.6.17.13.orig/drivers/scsi/dec_esp.c linux-2.6.17.13/drivers/scsi/dec_esp.c
    14762 --- linux-2.6.17.13.orig/drivers/scsi/dec_esp.c 2006-09-08 20:23:25.000000000 -0700
    14763 +++ linux-2.6.17.13/drivers/scsi/dec_esp.c      2006-09-09 10:17:04.000000000 -0700
     13923diff -Naur linux-2.6.18/drivers/scsi/dec_esp.c linux-2.6.18.mips/drivers/scsi/dec_esp.c
     13924--- linux-2.6.18/drivers/scsi/dec_esp.c 2006-09-19 20:42:06.000000000 -0700
     13925+++ linux-2.6.18.mips/drivers/scsi/dec_esp.c    2006-09-20 06:55:21.000000000 -0700
    1476413926@@ -55,7 +55,7 @@
    1476513927 
     
    1478013942                        esp->dregs = 0;
    1478113943                        esp->eregs = (void *)CKSEG1ADDR(mem_start +
    14782 diff -Naur linux-2.6.17.13.orig/drivers/scsi/NCR53C9x.h linux-2.6.17.13/drivers/scsi/NCR53C9x.h
    14783 --- linux-2.6.17.13.orig/drivers/scsi/NCR53C9x.h        2006-09-08 20:23:25.000000000 -0700
    14784 +++ linux-2.6.17.13/drivers/scsi/NCR53C9x.h     2006-09-09 10:17:04.000000000 -0700
    14785 @@ -145,12 +145,7 @@
     13944diff -Naur linux-2.6.18/drivers/scsi/NCR53C9x.h linux-2.6.18.mips/drivers/scsi/NCR53C9x.h
     13945--- linux-2.6.18/drivers/scsi/NCR53C9x.h        2006-09-19 20:42:06.000000000 -0700
     13946+++ linux-2.6.18.mips/drivers/scsi/NCR53C9x.h   2006-09-20 06:55:21.000000000 -0700
     13947@@ -144,12 +144,7 @@
    1478613948 
    1478713949 #ifndef MULTIPLE_PAD_SIZES
     
    1479713959 
    1479813960 struct ESP_regs {
    14799 diff -Naur linux-2.6.17.13.orig/drivers/scsi/sgiwd93.c linux-2.6.17.13/drivers/scsi/sgiwd93.c
    14800 --- linux-2.6.17.13.orig/drivers/scsi/sgiwd93.c 2006-09-08 20:23:25.000000000 -0700
    14801 +++ linux-2.6.17.13/drivers/scsi/sgiwd93.c      2006-09-09 10:17:04.000000000 -0700
     13961diff -Naur linux-2.6.18/drivers/scsi/sgiwd93.c linux-2.6.18.mips/drivers/scsi/sgiwd93.c
     13962--- linux-2.6.18/drivers/scsi/sgiwd93.c 2006-09-19 20:42:06.000000000 -0700
     13963+++ linux-2.6.18.mips/drivers/scsi/sgiwd93.c    2006-09-20 06:55:21.000000000 -0700
    1480213964@@ -14,6 +14,7 @@
    1480313965 #include <linux/interrupt.h>
     
    1481613978 static inline void init_hpc_chain(struct hpc_data *hd)
    1481713979 {
    14818 diff -Naur linux-2.6.17.13.orig/drivers/serial/ip22zilog.c linux-2.6.17.13/drivers/serial/ip22zilog.c
    14819 --- linux-2.6.17.13.orig/drivers/serial/ip22zilog.c     2006-09-08 20:23:25.000000000 -0700
    14820 +++ linux-2.6.17.13/drivers/serial/ip22zilog.c  2006-09-09 10:17:04.000000000 -0700
    14821 @@ -866,6 +866,7 @@
     13980diff -Naur linux-2.6.18/drivers/serial/ip22zilog.c linux-2.6.18.mips/drivers/serial/ip22zilog.c
     13981--- linux-2.6.18/drivers/serial/ip22zilog.c     2006-09-19 20:42:06.000000000 -0700
     13982+++ linux-2.6.18.mips/drivers/serial/ip22zilog.c        2006-09-20 06:55:21.000000000 -0700
     13983@@ -865,6 +865,7 @@
    1482213984        up->cflag = termios->c_cflag;
    1482313985 
     
    1482713989        spin_unlock_irqrestore(&up->port.lock, flags);
    1482813990 }
    14829 @@ -1027,6 +1028,8 @@
     13991@@ -1026,6 +1027,8 @@
    1483013992        }
    1483113993 
     
    1483613998 
    1483713999 static int __init ip22zilog_console_setup(struct console *con, char *options)
    14838 diff -Naur linux-2.6.17.13.orig/drivers/serial/ip3106_uart.c linux-2.6.17.13/drivers/serial/ip3106_uart.c
    14839 --- linux-2.6.17.13.orig/drivers/serial/ip3106_uart.c   1969-12-31 16:00:00.000000000 -0800
    14840 +++ linux-2.6.17.13/drivers/serial/ip3106_uart.c        2006-09-09 10:17:04.000000000 -0700
     14000diff -Naur linux-2.6.18/drivers/serial/ip3106_uart.c linux-2.6.18.mips/drivers/serial/ip3106_uart.c
     14001--- linux-2.6.18/drivers/serial/ip3106_uart.c   1969-12-31 16:00:00.000000000 -0800
     14002+++ linux-2.6.18.mips/drivers/serial/ip3106_uart.c      2006-09-20 06:55:21.000000000 -0700
    1484114003@@ -0,0 +1,912 @@
    1484214004+/*
     
    1575214914+MODULE_LICENSE("GPL");
    1575314915+MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_IP3106_MAJOR);
    15754 diff -Naur linux-2.6.17.13.orig/drivers/serial/Kconfig linux-2.6.17.13/drivers/serial/Kconfig
    15755 --- linux-2.6.17.13.orig/drivers/serial/Kconfig 2006-09-08 20:23:25.000000000 -0700
    15756 +++ linux-2.6.17.13/drivers/serial/Kconfig      2006-09-09 10:17:04.000000000 -0700
    15757 @@ -647,6 +647,25 @@
     14916diff -Naur linux-2.6.18/drivers/serial/Kconfig linux-2.6.18.mips/drivers/serial/Kconfig
     14917--- linux-2.6.18/drivers/serial/Kconfig 2006-09-19 20:42:06.000000000 -0700
     14918+++ linux-2.6.18.mips/drivers/serial/Kconfig    2006-09-20 06:55:21.000000000 -0700
     14919@@ -651,6 +651,25 @@
    1575814920        depends on SERIAL_SH_SCI=y
    1575914921        select SERIAL_CORE_CONSOLE
     
    1578114943        tristate
    1578214944 
    15783 diff -Naur linux-2.6.17.13.orig/drivers/serial/Makefile linux-2.6.17.13/drivers/serial/Makefile
    15784 --- linux-2.6.17.13.orig/drivers/serial/Makefile        2006-09-08 20:23:25.000000000 -0700
    15785 +++ linux-2.6.17.13/drivers/serial/Makefile     2006-09-09 10:17:04.000000000 -0700
     14945diff -Naur linux-2.6.18/drivers/serial/Makefile linux-2.6.18.mips/drivers/serial/Makefile
     14946--- linux-2.6.18/drivers/serial/Makefile        2006-09-19 20:42:06.000000000 -0700
     14947+++ linux-2.6.18.mips/drivers/serial/Makefile   2006-09-20 06:55:21.000000000 -0700
    1578614948@@ -39,6 +39,7 @@
    1578714949 obj-$(CONFIG_V850E_UART) += v850e_uart.o
     
    1579214954 obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
    1579314955 obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o
    15794 diff -Naur linux-2.6.17.13.orig/drivers/usb/gadget/net2280.c linux-2.6.17.13/drivers/usb/gadget/net2280.c
    15795 --- linux-2.6.17.13.orig/drivers/usb/gadget/net2280.c   2006-09-08 20:23:25.000000000 -0700
    15796 +++ linux-2.6.17.13/drivers/usb/gadget/net2280.c        2006-09-09 10:17:04.000000000 -0700
    15797 @@ -468,7 +468,8 @@
     14956diff -Naur linux-2.6.18/drivers/usb/gadget/net2280.c linux-2.6.18.mips/drivers/usb/gadget/net2280.c
     14957--- linux-2.6.18/drivers/usb/gadget/net2280.c   2006-09-19 20:42:06.000000000 -0700
     14958+++ linux-2.6.18.mips/drivers/usb/gadget/net2280.c      2006-09-20 06:55:21.000000000 -0700
     14959@@ -467,7 +467,8 @@
    1579814960 #elif  defined(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
    1579914961 #define USE_KMALLOC
     
    1580514967 
    1580614968 /* FIXME there are other cases, including an x86-64 one ...  */
    15807 diff -Naur linux-2.6.17.13.orig/drivers/usb/host/ohci-hcd.c linux-2.6.17.13/drivers/usb/host/ohci-hcd.c
    15808 --- linux-2.6.17.13.orig/drivers/usb/host/ohci-hcd.c    2006-09-08 20:23:25.000000000 -0700
    15809 +++ linux-2.6.17.13/drivers/usb/host/ohci-hcd.c 2006-09-09 10:17:04.000000000 -0700
    15810 @@ -906,6 +906,10 @@
     14969diff -Naur linux-2.6.18/drivers/usb/host/ohci-hcd.c linux-2.6.18.mips/drivers/usb/host/ohci-hcd.c
     14970--- linux-2.6.18/drivers/usb/host/ohci-hcd.c    2006-09-19 20:42:06.000000000 -0700
     14971+++ linux-2.6.18.mips/drivers/usb/host/ohci-hcd.c       2006-09-20 06:55:21.000000000 -0700
     14972@@ -909,6 +909,10 @@
    1581114973 #include "ohci-au1xxx.c"
    1581214974 #endif
     
    1581914981 #include "ohci-ppc-soc.c"
    1582014982 #endif
    15821 diff -Naur linux-2.6.17.13.orig/drivers/usb/host/ohci-pnx8550.c linux-2.6.17.13/drivers/usb/host/ohci-pnx8550.c
    15822 --- linux-2.6.17.13.orig/drivers/usb/host/ohci-pnx8550.c        1969-12-31 16:00:00.000000000 -0800
    15823 +++ linux-2.6.17.13/drivers/usb/host/ohci-pnx8550.c     2006-09-09 10:17:04.000000000 -0700
     14983diff -Naur linux-2.6.18/drivers/usb/host/ohci-pnx8550.c linux-2.6.18.mips/drivers/usb/host/ohci-pnx8550.c
     14984--- linux-2.6.18/drivers/usb/host/ohci-pnx8550.c        1969-12-31 16:00:00.000000000 -0800
     14985+++ linux-2.6.18.mips/drivers/usb/host/ohci-pnx8550.c   2006-09-20 06:55:21.000000000 -0700
    1582414986@@ -0,0 +1,277 @@
    1582514987+/*
     
    1610015262+module_init (ohci_hcd_pnx8550_init);
    1610115263+module_exit (ohci_hcd_pnx8550_cleanup);
    16102 diff -Naur linux-2.6.17.13.orig/drivers/video/au1100fb.c linux-2.6.17.13/drivers/video/au1100fb.c
    16103 --- linux-2.6.17.13.orig/drivers/video/au1100fb.c       2006-09-08 20:23:25.000000000 -0700
    16104 +++ linux-2.6.17.13/drivers/video/au1100fb.c    2006-09-09 10:17:04.000000000 -0700
    16105 @@ -38,6 +38,7 @@
     15264diff -Naur linux-2.6.18/drivers/video/au1100fb.c linux-2.6.18.mips/drivers/video/au1100fb.c
     15265--- linux-2.6.18/drivers/video/au1100fb.c       2006-09-19 20:42:06.000000000 -0700
     15266+++ linux-2.6.18.mips/drivers/video/au1100fb.c  2006-09-20 06:55:21.000000000 -0700
     15267@@ -40,6 +40,7 @@
    1610615268  *  with this program; if not, write  to the Free Software Foundation, Inc.,
    1610715269  *  675 Mass Ave, Cambridge, MA 02139, USA.
    1610815270  */
    1610915271+
    16110  #include <linux/config.h>
    1611115272 #include <linux/module.h>
    1611215273 #include <linux/kernel.h>
    16113 diff -Naur linux-2.6.17.13.orig/drivers/video/Kconfig linux-2.6.17.13/drivers/video/Kconfig
    16114 --- linux-2.6.17.13.orig/drivers/video/Kconfig  2006-09-08 20:23:25.000000000 -0700
    16115 +++ linux-2.6.17.13/drivers/video/Kconfig       2006-09-09 10:17:04.000000000 -0700
    16116 @@ -1142,6 +1142,17 @@
     15274 #include <linux/errno.h>
     15275diff -Naur linux-2.6.18/drivers/video/Kconfig linux-2.6.18.mips/drivers/video/Kconfig
     15276--- linux-2.6.18/drivers/video/Kconfig  2006-09-19 20:42:06.000000000 -0700
     15277+++ linux-2.6.18.mips/drivers/video/Kconfig     2006-09-20 06:55:21.000000000 -0700
     15278@@ -1250,6 +1250,17 @@
    1611715279          Please read the <file:Documentation/fb/README-sstfb.txt> for supported
    1611815280          options and other important info  support.
     
    1613215294        tristate "Cyberblade/i1 support"
    1613315295        depends on FB && PCI && X86_32 && !64BIT
    16134 @@ -1206,7 +1217,25 @@
     15296@@ -1314,7 +1325,25 @@
    1613515297 
    1613615298 config FB_AU1100
     
    1615915321 config FB_AU1200
    1616015322        bool "Au1200 LCD Driver"
    16161 @@ -1322,8 +1351,8 @@
     15323@@ -1430,8 +1459,8 @@
    1616215324        select FB_CFB_IMAGEBLIT
    1616315325        help
     
    1617015332 config FB_MAXINE
    1617115333        bool "Maxine (Personal DECstation) onboard framebuffer support"
    16172 diff -Naur linux-2.6.17.13.orig/drivers/video/Makefile linux-2.6.17.13/drivers/video/Makefile
    16173 --- linux-2.6.17.13.orig/drivers/video/Makefile 2006-09-08 20:23:25.000000000 -0700
    16174 +++ linux-2.6.17.13/drivers/video/Makefile      2006-09-09 10:17:04.000000000 -0700
    16175 @@ -93,6 +93,7 @@
     15334diff -Naur linux-2.6.18/drivers/video/Makefile linux-2.6.18.mips/drivers/video/Makefile
     15335--- linux-2.6.18/drivers/video/Makefile 2006-09-19 20:42:06.000000000 -0700
     15336+++ linux-2.6.18.mips/drivers/video/Makefile    2006-09-20 06:55:21.000000000 -0700
     15337@@ -95,6 +95,7 @@
    1617615338 obj-$(CONFIG_FB_TX3912)                  += tx3912fb.o
    1617715339 obj-$(CONFIG_FB_S1D13XXX)        += s1d13xxxfb.o
     
    1617915341+obj-$(CONFIG_FB_SMIVGX)                  += smivgxfb.o
    1618015342 obj-$(CONFIG_FB_S3C2410)         += s3c2410fb.o
    16181  
    16182  # Platform or fallback drivers go here
    16183 diff -Naur linux-2.6.17.13.orig/drivers/video/smivgxfb.c linux-2.6.17.13/drivers/video/smivgxfb.c
    16184 --- linux-2.6.17.13.orig/drivers/video/smivgxfb.c       1969-12-31 16:00:00.000000000 -0800
    16185 +++ linux-2.6.17.13/drivers/video/smivgxfb.c    2006-09-09 10:17:04.000000000 -0700
     15343 obj-$(CONFIG_FB_PNX4008_DUM)     += pnx4008/
     15344 obj-$(CONFIG_FB_PNX4008_DUM_RGB)  += pnx4008/
     15345diff -Naur linux-2.6.18/drivers/video/smivgxfb.c linux-2.6.18.mips/drivers/video/smivgxfb.c
     15346--- linux-2.6.18/drivers/video/smivgxfb.c       1969-12-31 16:00:00.000000000 -0800
     15347+++ linux-2.6.18.mips/drivers/video/smivgxfb.c  2006-09-20 06:55:21.000000000 -0700
    1618615348@@ -0,0 +1,387 @@
    1618715349+/***************************************************************************
     
    1657215734+MODULE_DESCRIPTION("Framebuffer driver for SMI Voyager");
    1657315735+MODULE_LICENSE("GPL");
    16574 diff -Naur linux-2.6.17.13.orig/.gitignore linux-2.6.17.13/.gitignore
    16575 --- linux-2.6.17.13.orig/.gitignore     2006-09-08 20:23:25.000000000 -0700
    16576 +++ linux-2.6.17.13/.gitignore  2006-09-09 10:17:04.000000000 -0700
    16577 @@ -30,6 +30,12 @@
    16578  include/linux/autoconf.h
    16579  include/linux/compile.h
    16580  include/linux/version.h
    16581 +include/asm-*/asm-offsets.h
    16582  
    16583  # stgit generated dirs
    16584  patches-*
    16585 +
    16586 +#
    16587 +# Quilt
    16588 +#
    16589 +patches
    16590 diff -Naur linux-2.6.17.13.orig/include/asm-mips/asmmacro-32.h linux-2.6.17.13/include/asm-mips/asmmacro-32.h
    16591 --- linux-2.6.17.13.orig/include/asm-mips/asmmacro-32.h 2006-09-08 20:23:25.000000000 -0700
    16592 +++ linux-2.6.17.13/include/asm-mips/asmmacro-32.h      2006-09-09 10:17:04.000000000 -0700
    16593 @@ -12,7 +12,7 @@
    16594  #include <asm/fpregdef.h>
    16595  #include <asm/mipsregs.h>
    16596  
    16597 -       .macro  fpu_save_double thread status tmp1=t0 tmp2
    16598 +       .macro  fpu_save_double thread status tmp1=t0
    16599         cfc1    \tmp1,  fcr31
    16600         sdc1    $f0,  THREAD_FPR0(\thread)
    16601         sdc1    $f2,  THREAD_FPR2(\thread)
    16602 @@ -70,7 +70,7 @@
    16603         sw      \tmp, THREAD_FCR31(\thread)
    16604         .endm
    16605  
    16606 -       .macro  fpu_restore_double thread tmp=t0
    16607 +       .macro  fpu_restore_double thread status tmp=t0
    16608         lw      \tmp, THREAD_FCR31(\thread)
    16609         ldc1    $f0,  THREAD_FPR0(\thread)
    16610         ldc1    $f2,  THREAD_FPR2(\thread)
    16611 diff -Naur linux-2.6.17.13.orig/include/asm-mips/asmmacro-64.h linux-2.6.17.13/include/asm-mips/asmmacro-64.h
    16612 --- linux-2.6.17.13.orig/include/asm-mips/asmmacro-64.h 2006-09-08 20:23:25.000000000 -0700
    16613 +++ linux-2.6.17.13/include/asm-mips/asmmacro-64.h      2006-09-09 10:17:04.000000000 -0700
    16614 @@ -53,12 +53,12 @@
    16615         sdc1    $f31, THREAD_FPR31(\thread)
    16616         .endm
    16617  
    16618 -       .macro  fpu_save_double thread status tmp1 tmp2
    16619 -       sll     \tmp2, \tmp1, 5
    16620 -       bgez    \tmp2, 2f
    16621 +       .macro  fpu_save_double thread status tmp
    16622 +       sll     \tmp, \status, 5
    16623 +       bgez    \tmp, 2f
    16624         fpu_save_16odd \thread
    16625  2:
    16626 -       fpu_save_16even \thread \tmp1                   # clobbers t1
    16627 +       fpu_save_16even \thread \tmp
    16628         .endm
    16629  
    16630         .macro  fpu_restore_16even thread tmp=t0
    16631 @@ -101,13 +101,12 @@
    16632         ldc1    $f31, THREAD_FPR31(\thread)
    16633         .endm
    16634  
    16635 -       .macro  fpu_restore_double thread tmp
    16636 -       mfc0    t0, CP0_STATUS
    16637 -       sll     t1, t0, 5
    16638 -       bgez    t1, 1f                          # 16 register mode?
    16639 +       .macro  fpu_restore_double thread status tmp
    16640 +       sll     \tmp, \status, 5
    16641 +       bgez    \tmp, 1f                                # 16 register mode?
    16642  
    16643 -       fpu_restore_16odd a0
    16644 -1:     fpu_restore_16even a0, t0               # clobbers t0
    16645 +       fpu_restore_16odd \thread
    16646 +1:     fpu_restore_16even \thread \tmp
    16647         .endm
    16648  
    16649         .macro  cpu_save_nonscratch thread
    16650 diff -Naur linux-2.6.17.13.orig/include/asm-mips/asmmacro.h linux-2.6.17.13/include/asm-mips/asmmacro.h
    16651 --- linux-2.6.17.13.orig/include/asm-mips/asmmacro.h    2006-09-08 20:23:25.000000000 -0700
    16652 +++ linux-2.6.17.13/include/asm-mips/asmmacro.h 2006-09-09 10:17:04.000000000 -0700
    16653 @@ -27,14 +27,14 @@
    16654         ori     \reg, \reg, TCSTATUS_IXMT
    16655         xori    \reg, \reg, TCSTATUS_IXMT
    16656         mtc0    \reg, CP0_TCSTATUS
    16657 -       ehb
    16658 +       _ehb
    16659         .endm
    16660  
    16661         .macro  local_irq_disable reg=t0
    16662         mfc0    \reg, CP0_TCSTATUS
    16663         ori     \reg, \reg, TCSTATUS_IXMT
    16664         mtc0    \reg, CP0_TCSTATUS
    16665 -       ehb
    16666 +       _ehb
    16667         .endm
    16668  #else
    16669         .macro  local_irq_enable reg=t0
    16670 diff -Naur linux-2.6.17.13.orig/include/asm-mips/cacheflush.h linux-2.6.17.13/include/asm-mips/cacheflush.h
    16671 --- linux-2.6.17.13.orig/include/asm-mips/cacheflush.h  2006-09-08 20:23:25.000000000 -0700
    16672 +++ linux-2.6.17.13/include/asm-mips/cacheflush.h       2006-09-09 10:17:04.000000000 -0700
     15736diff -Naur linux-2.6.18/include/asm-mips/cacheflush.h linux-2.6.18.mips/include/asm-mips/cacheflush.h
     15737--- linux-2.6.18/include/asm-mips/cacheflush.h  2006-09-19 20:42:06.000000000 -0700
     15738+++ linux-2.6.18.mips/include/asm-mips/cacheflush.h     2006-09-20 06:55:21.000000000 -0700
    1667315739@@ -21,7 +21,6 @@
    1667415740  *  - flush_cache_range(vma, start, end) flushes a range of pages
     
    1672915795 extern void (*flush_cache_sigtramp)(unsigned long addr);
    1673015796 extern void (*flush_icache_all)(void);
    16731 diff -Naur linux-2.6.17.13.orig/include/asm-mips/cpu-features.h linux-2.6.17.13/include/asm-mips/cpu-features.h
    16732 --- linux-2.6.17.13.orig/include/asm-mips/cpu-features.h        2006-09-08 20:23:25.000000000 -0700
    16733 +++ linux-2.6.17.13/include/asm-mips/cpu-features.h     2006-09-09 10:17:04.000000000 -0700
    16734 @@ -144,12 +144,8 @@
    16735  #define cpu_has_dsp            (cpu_data[0].ases & MIPS_ASE_DSP)
    16736  #endif
    16737  
    16738 -#ifdef CONFIG_MIPS_MT
    16739  #ifndef cpu_has_mipsmt
    16740 -# define cpu_has_mipsmt                (cpu_data[0].ases & MIPS_ASE_MIPSMT)
    16741 -#endif
    16742 -#else
    16743 -# define cpu_has_mipsmt                0
    16744 +#define cpu_has_mipsmt         (cpu_data[0].ases & MIPS_ASE_MIPSMT)
    16745  #endif
    16746  
    16747  #ifdef CONFIG_32BIT
    16748 @@ -188,19 +184,15 @@
    16749  # endif
    16750  #endif
    16751  
    16752 -#ifdef CONFIG_CPU_MIPSR2
    16753 -# if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
    16754 -#  define cpu_has_vint         (cpu_data[0].options & MIPS_CPU_VINT)
    16755 -# else
    16756 -#  define cpu_has_vint                 0
    16757 -# endif
    16758 -# if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
    16759 -#  define cpu_has_veic         (cpu_data[0].options & MIPS_CPU_VEIC)
    16760 -# else
    16761 -#  define cpu_has_veic                 0
    16762 -# endif
    16763 -#else
    16764 +#if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
    16765 +# define cpu_has_vint          (cpu_data[0].options & MIPS_CPU_VINT)
    16766 +#elif !defined(cpu_has_vint)
    16767  # define cpu_has_vint                  0
    16768 +#endif
    16769 +
    16770 +#if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
    16771 +# define cpu_has_veic          (cpu_data[0].options & MIPS_CPU_VEIC)
    16772 +#elif !defined(cpu_has_veic)
    16773  # define cpu_has_veic                  0
    16774  #endif
    16775  
    16776 diff -Naur linux-2.6.17.13.orig/include/asm-mips/fixmap.h linux-2.6.17.13/include/asm-mips/fixmap.h
    16777 --- linux-2.6.17.13.orig/include/asm-mips/fixmap.h      2006-09-08 20:23:25.000000000 -0700
    16778 +++ linux-2.6.17.13/include/asm-mips/fixmap.h   2006-09-09 10:17:04.000000000 -0700
    16779 @@ -46,8 +46,16 @@
     15797diff -Naur linux-2.6.18/include/asm-mips/fixmap.h linux-2.6.18.mips/include/asm-mips/fixmap.h
     15798--- linux-2.6.18/include/asm-mips/fixmap.h      2006-09-19 20:42:06.000000000 -0700
     15799+++ linux-2.6.18.mips/include/asm-mips/fixmap.h 2006-09-20 06:55:21.000000000 -0700
     15800@@ -45,8 +45,16 @@
    1678015801  * fix-mapped?
    1678115802  */
     
    1679515816 #endif
    1679615817        __end_of_fixed_addresses
    16797 @@ -70,7 +78,7 @@
    16798   * the start of the fixmap, and leave one page empty
     15818@@ -70,9 +78,9 @@
    1679915819  * at the top of mem..
    1680015820  */
     15821 #if defined(CONFIG_CPU_TX39XX) || defined(CONFIG_CPU_TX49XX)
     15822-#define FIXADDR_TOP    (0xff000000UL - 0x2000)
     15823+#define FIXADDR_TOP    ((unsigned long)(long)(int)(0xff000000 - 0x20000))
     15824 #else
    1680115825-#define FIXADDR_TOP    (0xffffe000UL)
    16802 +#define FIXADDR_TOP    ((unsigned long)(long)(int)0xfffe0000)
     15826+#define FIXADDR_TOP    ((unsigned long)(long)(int)0xfffe0000)
     15827 #endif
    1680315828 #define FIXADDR_SIZE   (__end_of_fixed_addresses << PAGE_SHIFT)
    1680415829 #define FIXADDR_START  (FIXADDR_TOP - FIXADDR_SIZE)
    16805  
    16806 diff -Naur linux-2.6.17.13.orig/include/asm-mips/futex.h linux-2.6.17.13/include/asm-mips/futex.h
    16807 --- linux-2.6.17.13.orig/include/asm-mips/futex.h       2006-09-08 20:23:25.000000000 -0700
    16808 +++ linux-2.6.17.13/include/asm-mips/futex.h    2006-09-09 10:17:04.000000000 -0700
    16809 @@ -22,51 +22,53 @@
    16810                 "       .set    push                            \n"     \
    16811                 "       .set    noat                            \n"     \
    16812                 "       .set    mips3                           \n"     \
    16813 -               "1:     ll      %1, (%3)        # __futex_atomic_op     \n" \
    16814 +               "1:     ll      %1, %4  # __futex_atomic_op     \n"     \
    16815                 "       .set    mips0                           \n"     \
    16816                 "       " insn  "                               \n"     \
    16817                 "       .set    mips3                           \n"     \
    16818 -               "2:     sc      $1, (%3)                        \n"     \
    16819 +               "2:     sc      $1, %2                          \n"     \
    16820                 "       beqzl   $1, 1b                          \n"     \
    16821                 __FUTEX_SMP_SYNC                                        \
    16822                 "3:                                             \n"     \
    16823                 "       .set    pop                             \n"     \
    16824                 "       .set    mips0                           \n"     \
    16825                 "       .section .fixup,\"ax\"                  \n"     \
    16826 -               "4:     li      %0, %5                          \n"     \
    16827 +               "4:     li      %0, %6                          \n"     \
    16828                 "       j       2b                              \n"     \
    16829                 "       .previous                               \n"     \
    16830                 "       .section __ex_table,\"a\"               \n"     \
    16831                 "       "__UA_ADDR "\t1b, 4b                    \n"     \
    16832                 "       "__UA_ADDR "\t2b, 4b                    \n"     \
    16833                 "       .previous                               \n"     \
    16834 -               : "=r" (ret), "=r" (oldval)                             \
    16835 -               : "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT));   \
    16836 +               : "=r" (ret), "=&r" (oldval), "=R" (*uaddr)             \
    16837 +               : "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT)    \
    16838 +               : "memory");                                            \
    16839         } else if (cpu_has_llsc) {                                      \
    16840                 __asm__ __volatile__(                                   \
    16841                 "       .set    push                            \n"     \
    16842                 "       .set    noat                            \n"     \
    16843                 "       .set    mips3                           \n"     \
    16844 -               "1:     ll      %1, (%3)        # __futex_atomic_op     \n" \
    16845 +               "1:     ll      %1, %4  # __futex_atomic_op     \n"     \
    16846                 "       .set    mips0                           \n"     \
    16847                 "       " insn  "                               \n"     \
    16848                 "       .set    mips3                           \n"     \
    16849 -               "2:     sc      $1, (%3)&