Changeset 1ad19d5
- Timestamp:
- Sep 25, 2006, 10:45:14 AM (18 years ago)
- Branches:
- clfs-1.2, clfs-2.1, clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
- Children:
- 15f7d33
- Parents:
- 0b2e09e
- Location:
- patches
- Files:
-
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
patches/linux-2.6.18-mips-1.patch
r0b2e09e r1ad19d5 1 1 Submitted By: Jim Gifford (patches at jg555 dot com) 2 Date: 2006-09- 163 Initial Package Version: 2.6.1 7.132 Date: 2006-09-23 3 Initial Package Version: 2.6.18 4 4 Origin: Linux-MIPS 5 5 Upstream Status: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/ 6 6 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 @@ 7 diff -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 15 diff -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 - 279 diff -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 333 diff -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 23 352 CONFIG_GENERIC_FIND_NEXT_BIT=y 24 353 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 396 diff -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 450 diff -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 518 463 select SYS_SUPPORTS_64BIT_KERNEL 519 464 select SYS_SUPPORTS_BIG_ENDIAN 520 select SYS_SUPPORTS_LITTLE_ENDIAN 521 + select SYS_SUPPORTS_MULTITHREADING if EXPERIMENTAL 465 - select ARCH_SPARSEMEM_ENABLE 522 466 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 @@ 556 470 config MACH_VR41XX 557 471 bool "NEC VR41XX-based machines" … … 562 476 config PMC_YOSEMITE 563 477 bool "PMC-Sierra Yosemite eval board" 564 @@ - 522,6 +525,7 @@478 @@ -614,6 +610,7 @@ 565 479 select SYS_SUPPORTS_64BIT_KERNEL 566 480 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 584 482 + select SYS_SUPPORTS_SMP 585 483 help 586 484 This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics 587 485 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 @@ 599 487 select CPU_SUPPORTS_32BIT_KERNEL 600 488 select CPU_SUPPORTS_64BIT_KERNEL … … 605 493 kernel built with this option will not run on any other type of 606 494 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 609 500 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 618 518 619 519 # 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_MIPS32520 # - Highmem only makes sense for the 32-bit kernel. 521 @@ -1691,9 +1688,6 @@ 522 523 config ARCH_SPARSEMEM_ENABLE 624 524 bool 625 @@ -1343,7 +1352,7 @@626 default y if CPU_MIPS64_R1 || CPU_MIPS64_R2627 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 2631 #632 config CPU_MIPSR1633 bool634 @@ -1436,6 +1445,13 @@635 bool636 select BOARD_SCACHE637 638 +#639 +# Support for a MIPS32 / MIPS64 style S-caches640 +#641 +config MIPS_CPU_SCACHE642 + bool643 + select BOARD_SCACHE644 +645 config R5000_CPU_SCACHE646 bool647 select BOARD_SCACHE648 @@ -1455,32 +1471,57 @@649 config CPU_HAS_PREFETCH650 bool651 652 -config MIPS_MT653 - bool "Enable MIPS MT"654 525 - 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 @@ 758 532 config SMP 759 533 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 764 537 This enables support for systems with more than one CPU. If you have 765 538 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 @@ 539 diff -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 @@ 791 618 case CPU_R5000: 792 619 case CPU_NEVADA: 793 620 case CPU_RM7000: 794 621 - case CPU_RM9000: 795 622 - case CPU_TX49XX: 796 623 case CPU_4KC: 797 624 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 @@ 799 638 } else 800 639 printk(" unavailable.\n"); … … 811 650 printk(" unavailable.\n"); 812 651 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 @@ 652 diff -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 */ 917 680 if (!user_mode(regs)) 918 return 1; 681 - return 1; 682 + return; 919 683 920 684 - if (try_to_freeze()) 921 685 - goto no_signal; 922 686 - 923 if (!oldset) 687 - if (!oldset) 688 + if (test_thread_flag(TIF_RESTORE_SIGMASK)) 689 + oldset = ¤t->saved_sigmask; 690 + else 924 691 oldset = ¤t->blocked; 925 692 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 + } 929 709 930 710 -no_signal: … … 932 712 * Who's code doesn't conform to the restartable syscall convention 933 713 * dies here!!! The li instruction, a single machine instruction, 934 @@ -20 7,6 +203,7@@714 @@ -208,8 +219,22 @@ 935 715 regs->regs[2] == ERESTARTNOINTR) { 936 716 regs->cp0_epc -= 8; 937 717 } 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 + } 938 723 + 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, ¤t->saved_sigmask, NULL); 939 733 } 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(¤t->sighand->siglock); 751 - saveset = current->blocked; 752 + current->saved_sigmask = current->blocked; 753 current->blocked = newset; 754 recalc_sigpending(); 755 spin_unlock_irq(¤t->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... */ 771 diff -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, ®s, 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 -} 784 diff -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 810 diff -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; 940 939 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; 941 951 } 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 999 diff -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 @@ 946 1003 #include <linux/mm.h> 947 1004 #include <linux/errno.h> … … 958 1015 #include <asm/byteorder.h> 959 1016 #include <asm/cpu.h> 960 @@ -4 82,12 +482,16 @@1017 @@ -471,12 +471,16 @@ 961 1018 */ 962 1019 asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) … … 975 1032 goto out; 976 1033 977 @@ - 505,9 +509,14 @@1034 @@ -494,9 +498,14 @@ 978 1035 send_sig(current->exit_code, current, 1); 979 1036 current->exit_code = 0; … … 994 1051 + regs->regs[6], regs->regs[7]); 995 1052 } 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 1053 diff -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 1080 1060 + sys sys_set_robust_list 2 1081 1061 + sys sys_get_robust_list 3 … … 1083 1063 1084 1064 /* 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 1065 diff -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 1074 diff -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 @@ 1090 1087 PTR sys_splice 1091 1088 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 */ 1105 1091 + PTR sys_vmsplice /* 6270 */ 1106 + PTR sys_ni_syscall 1092 PTR sys_move_pages 1107 1093 + PTR compat_sys_set_robust_list 1108 1094 + 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 1095 diff -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 1119 1102 + PTR compat_sys_set_robust_list 1120 1103 + PTR compat_sys_get_robust_list /* 4310 */ 1121 1104 .size sys_call_table,.-sys_call_table 1122 diff -Naur linux-2.6.1 7.13.orig/arch/mips/kernel/signal32.c linux-2.6.17.13/arch/mips/kernel/signal32.c1123 --- linux-2.6.1 7.13.orig/arch/mips/kernel/signal32.c 2006-09-08 20:23:25.000000000 -07001124 +++ linux-2.6.1 7.13/arch/mips/kernel/signal32.c 2006-09-09 10:17:04.000000000 -07001105 diff -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 1125 1108 @@ -815,9 +815,6 @@ 1126 1109 if (!user_mode(regs)) … … 1153 1136 1154 1137 /* 1155 diff -Naur linux-2.6.1 7.13.orig/arch/mips/kernel/signal.c linux-2.6.17.13/arch/mips/kernel/signal.c1156 --- linux-2.6.1 7.13.orig/arch/mips/kernel/signal.c 2006-09-08 20:23:25.000000000 -07001157 +++ linux-2.6.1 7.13/arch/mips/kernel/signal.c 2006-09-09 10:17:04.000000000 -07001158 @@ -42 5,15 +425,11 @@1138 diff -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 @@ 1159 1142 if (!user_mode(regs)) 1160 1143 return; … … 1172 1155 if (signr > 0) { 1173 1156 /* Whee! Actually deliver the signal. */ 1174 @@ -44 7,9 +443,10 @@1157 @@ -446,9 +442,10 @@ 1175 1158 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 1176 1159 clear_thread_flag(TIF_RESTORE_SIGMASK); … … 1184 1167 * Who's code doesn't conform to the restartable syscall convention 1185 1168 * dies here!!! The li instruction, a single machine instruction, 1186 @@ -46 7,6 +464,7 @@1169 @@ -466,6 +463,7 @@ 1187 1170 regs->regs[7] = regs->regs[26]; 1188 1171 regs->cp0_epc -= 4; … … 1192 1175 1193 1176 /* 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) 1177 diff -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) 1227 1183 { 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; 1204 diff -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 1237 1207 @@ -203,7 +203,7 @@ 1238 1208 write_vpe_c0_config( read_c0_config()); … … 1244 1214 /* Propagate Config7 */ 1245 1215 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 @@ 1216 diff -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. 1228 diff -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) 1249 diff -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++; 1295 1344 } 1345 printk("\n"); 1346 + show_backtrace(task, regs); 1296 1347 } 1297 1348 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(®s); 1404 } 1405 } 1406 - printk("\n"); 1407 + show_stacktrace(task, ®s); 1322 1408 } 1323 1409 1324 -#ifdef CONFIG_CPU_MIPSR21325 +#ifdef CONFIG_CPU_MIPSR2_SRS1326 1410 /* 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) 1332 1414 { 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(®s, 0, sizeof(regs)); 1424 + prepare_frametrace(®s); 1425 + show_backtrace(current, ®s); 1339 1426 } 1340 1427 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"); 1344 1438 } 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 1456 diff -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 @@ 1371 1460 */ 1372 1461 write_tc_c0_tcbind((read_tc_c0_tcbind() & ~TCBIND_CURVPE) | v->minor); … … 1385 1474 write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() | VPECONF0_VPA); 1386 1475 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 1476 diff -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 1458 1479 @@ -1,78 +0,0 @@ 1459 1480 -/* … … 1535 1556 -EXPORT_SYMBOL(pci_iomap); 1536 1557 -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 @@ 1558 diff -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 @@ 1604 1562 lib-y += csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \ 1605 1563 strnlen_user.o uncached.o 1606 1564 1607 1565 -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.1 7.13.orig/arch/mips/lib-32/dump_tlb.c linux-2.6.17.13/arch/mips/lib-32/dump_tlb.c1613 --- linux-2.6.1 7.13.orig/arch/mips/lib-32/dump_tlb.c 2006-09-08 20:23:25.000000000 -07001614 +++ linux-2.6.1 7.13/arch/mips/lib-32/dump_tlb.c 2006-09-09 10:17:04.000000000 -07001615 @@ -4 1,8 +41,6 @@1566 - 1567 # libgcc-style stuff needed in the kernel 1568 lib-y += ashldi3.o ashrdi3.o lshrdi3.o 1569 1570 diff -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 @@ 1616 1574 return "256Mb"; 1617 1575 #endif … … 1622 1580 1623 1581 #define BARRIER() \ 1624 diff -Naur linux-2.6.1 7.13.orig/arch/mips/lib-64/dump_tlb.c linux-2.6.17.13/arch/mips/lib-64/dump_tlb.c1625 --- linux-2.6.1 7.13.orig/arch/mips/lib-64/dump_tlb.c 2006-09-08 20:23:25.000000000 -07001626 +++ linux-2.6.1 7.13/arch/mips/lib-64/dump_tlb.c 2006-09-09 10:17:04.000000000 -07001627 @@ -3 2,8 +32,6 @@1582 diff -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 @@ 1628 1586 case PM_256M: return "256Mb"; 1629 1587 #endif … … 1634 1592 1635 1593 #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 + 1594 diff -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 1645 1599 # 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 1654 1604 # 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 }; 1605 diff -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 +} 1794 diff -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; 1661 1800 #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; 1806 diff -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) 1667 1826 { 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 1911 diff -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 1724 1914 @@ -208,23 +208,23 @@ 1725 1915 unsigned int a0 = 7; … … 1752 1942 return a0; 1753 1943 #endif 1754 diff -Naur linux-2.6.1 7.13.orig/arch/mips/mm/cache.c linux-2.6.17.13/arch/mips/mm/cache.c1755 --- linux-2.6.1 7.13.orig/arch/mips/mm/cache.c 2006-09-08 20:23:25.000000000 -07001756 +++ linux-2.6.1 7.13/arch/mips/mm/cache.c 2006-09-09 10:17:04.000000000 -07001757 @@ -2 6,7 +26,7 @@1944 diff -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 @@ 1758 1948 void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, 1759 1949 unsigned long pfn); … … 1764 1954 /* MIPS specific cache operations */ 1765 1955 void (*flush_cache_sigtramp)(unsigned long addr); 1766 @@ -7 1,6 +71,8 @@1956 @@ -70,6 +70,8 @@ 1767 1957 struct address_space *mapping = page_mapping(page); 1768 1958 unsigned long addr; … … 1773 1963 SetPageDcacheDirty(page); 1774 1964 return; 1775 @@ -9 2,16 +94,16 @@1965 @@ -91,16 +93,16 @@ 1776 1966 { 1777 1967 struct page *page; … … 1797 1987 } 1798 1988 } 1799 diff -Naur linux-2.6.1 7.13.orig/arch/mips/mm/c-r3k.c linux-2.6.17.13/arch/mips/mm/c-r3k.c1800 --- linux-2.6.1 7.13.orig/arch/mips/mm/c-r3k.c 2006-09-08 20:23:25.000000000 -07001801 +++ linux-2.6.1 7.13/arch/mips/mm/c-r3k.c 2006-09-09 10:17:04.000000000 -07001989 diff -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 1802 1992 @@ -335,7 +335,7 @@ 1803 1993 flush_cache_mm = r3k_flush_cache_mm; … … 1809 1999 1810 2000 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 @@ 2001 diff -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 @@ 1997 2005 } 1998 2006 } … … 2003 2011 2004 2012 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 @@ 2042 2014 * We're not sure of the virtual address(es) involved here, so 2043 2015 * we have to flush the entire I-cache. … … 2048 2020 2049 2021 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; 2094 2025 /* 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... 2161 2029 */ 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 @@ 2173 2032 __flush_cache_all = r4k___flush_cache_all; 2174 2033 flush_cache_mm = r4k_flush_cache_mm; … … 2179 2038 2180 2039 flush_cache_sigtramp = r4k_flush_cache_sigtramp; 2181 diff -Naur linux-2.6.1 7.13.orig/arch/mips/mm/c-sb1.c linux-2.6.17.13/arch/mips/mm/c-sb1.c2182 --- linux-2.6.1 7.13.orig/arch/mips/mm/c-sb1.c 2006-09-08 20:23:25.000000000 -07002183 +++ linux-2.6.1 7.13/arch/mips/mm/c-sb1.c 2006-09-09 10:17:04.000000000 -07002184 @@ -15 6,6 +156,26 @@2040 diff -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 @@ 2185 2044 } 2186 2045 … … 2209 2068 * dcache first, then invalidate the icache. If the page isn't 2210 2069 * executable, nothing is required. 2211 @@ -17 4,8 +194,11 @@2070 @@ -173,8 +193,11 @@ 2212 2071 /* 2213 2072 * Bumping the ASID is probably cheaper than the flush ... … … 2223 2082 2224 2083 #ifdef CONFIG_SMP 2225 @@ -21 1,26 +234,6 @@2084 @@ -210,26 +233,6 @@ 2226 2085 __attribute__((alias("local_sb1_flush_cache_page"))); 2227 2086 #endif … … 2250 2109 /* 2251 2110 * Invalidate all caches on this CPU 2252 @@ -32 7,9 +330,12 @@2111 @@ -326,9 +329,12 @@ 2253 2112 * If there's a context, bump the ASID (cheaper than a flush, 2254 2113 * since we don't know VAs!) … … 2266 2125 2267 2126 #ifdef CONFIG_SMP 2268 @@ -52 1,7 +527,7 @@2127 @@ -520,7 +526,7 @@ 2269 2128 2270 2129 /* These routines are for Icache coherence with the Dcache */ … … 2275 2134 2276 2135 /* This implies an Icache flush too, so can't be nop'ed */ 2277 diff -Naur linux-2.6.1 7.13.orig/arch/mips/mm/c-tx39.c linux-2.6.17.13/arch/mips/mm/c-tx39.c2278 --- linux-2.6.1 7.13.orig/arch/mips/mm/c-tx39.c 2006-09-08 20:23:25.000000000 -07002279 +++ linux-2.6.1 7.13/arch/mips/mm/c-tx39.c 2006-09-09 10:17:04.000000000 -07002136 diff -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 2280 2139 @@ -382,7 +382,7 @@ 2281 2140 flush_cache_mm = (void *) tx39h_flush_icache_all; … … 2296 2155 2297 2156 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 @@ 2157 diff -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 2169 diff -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 @@ 2302 2173 #include <asm/cachectl.h> 2303 2174 #include <asm/cpu.h> … … 2339 2210 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); 2340 2211 2341 @@ -8 1,13 +109,183@@2212 @@ -80,13 +108,184 @@ 2342 2213 return 1UL << order; 2343 2214 } … … 2374 2245 + unsigned long old_ctx; 2375 2246 + pte_t pte; 2376 + unsignedint tlbidx;2247 + int tlbidx; 2377 2248 + 2378 2249 + inc_preempt_count(); … … 2438 2309 + mtc0_tlbw_hazard(); 2439 2310 + tlb_write_indexed(); 2311 + tlbw_use_hazard(); 2440 2312 + write_c0_entryhi(old_ctx); 2441 2313 + EXIT_CRITICAL(flags); … … 2526 2398 { 2527 2399 unsigned long kmap_vstart; 2528 @@ -9 8,11 +296,12 @@2400 @@ -97,11 +296,12 @@ 2529 2401 2530 2402 kmap_prot = PAGE_KERNEL; … … 2540 2412 pud_t *pud; 2541 2413 pmd_t *pmd; 2542 @@ -12 3,7 +322,7 @@2414 @@ -122,7 +322,7 @@ 2543 2415 for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) { 2544 2416 if (pmd_none(*pmd)) { … … 2549 2421 BUG(); 2550 2422 } 2551 @@ -13 3,9 +332,8 @@2423 @@ -132,9 +332,8 @@ 2552 2424 } 2553 2425 j = 0; … … 2560 2432 #ifndef CONFIG_NEED_MULTIPLE_NODES 2561 2433 extern void pagetable_init(void); 2562 @@ -1 50,6 +348,7 @@2434 @@ -175,6 +374,7 @@ 2563 2435 #ifdef CONFIG_HIGHMEM 2564 2436 kmap_init(); … … 2568 2440 max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; 2569 2441 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 @@ 2442 diff -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 @@ 2585 2446 2586 2447 void __init pagetable_init(void) … … 2595 2456 pmd_t *pmd; 2596 2457 pte_t *pte; 2597 @@ -4 5,7 +46,6 @@2458 @@ -44,7 +45,6 @@ 2598 2459 pgd_init((unsigned long)swapper_pg_dir 2599 2460 + sizeof(pgd_t) * USER_PTRS_PER_PGD); … … 2603 2464 2604 2465 /* 2605 @@ -5 4,6 +54,7 @@2466 @@ -53,6 +53,7 @@ 2606 2467 vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; 2607 2468 fixrange_init(vaddr, 0, pgd_base); … … 2611 2472 * Permanent kmaps: 2612 2473 */ 2613 diff -Naur linux-2.6.1 7.13.orig/arch/mips/mm/pgtable-64.c linux-2.6.17.13/arch/mips/mm/pgtable-64.c2614 --- linux-2.6.1 7.13.orig/arch/mips/mm/pgtable-64.c 2006-09-08 20:23:25.000000000 -07002615 +++ linux-2.6.1 7.13/arch/mips/mm/pgtable-64.c 2006-09-09 10:17:04.000000000 -07002474 diff -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 2616 2477 @@ -8,6 +8,7 @@ 2617 2478 */ … … 2640 2501 + fixrange_init(vaddr, 0, pgd_base); 2641 2502 } 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 = ¤t_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 2503 diff -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 */ 2533 diff -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 2761 2536 @@ -2,7 +2,7 @@ 2762 2537 * fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups. … … 2768 2543 * This program is free software; you can redistribute it and/or modify 2769 2544 * 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 @@ 2545 diff -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 2557 diff -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 @@ 2774 2561 if (first_cfg) { 2775 2562 /* reserve a wired entry for pci config accesses */ … … 2780 2567 panic (KERN_ERR "PCI unable to get vm area\n"); 2781 2568 pci_cfg_wired_entry = read_c0_wired(); 2782 diff -Naur linux-2.6.1 7.13.orig/arch/mips/qemu/Makefile linux-2.6.17.13/arch/mips/qemu/Makefile2783 --- linux-2.6.1 7.13.orig/arch/mips/qemu/Makefile 2006-09-08 20:23:25.000000000 -07002784 +++ linux-2.6.1 7.13/arch/mips/qemu/Makefile 2006-09-09 10:17:04.000000000 -07002569 diff -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 2785 2572 @@ -4,4 +4,5 @@ 2786 2573 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 2788 2575 2789 2576 +obj-$(CONFIG_VT) += q-vga.o 2790 2577 obj-$(CONFIG_SMP) += q-smp.o 2791 diff -Naur linux-2.6.1 7.13.orig/arch/mips/qemu/q-setup.c linux-2.6.17.13/arch/mips/qemu/q-setup.c2792 --- linux-2.6.1 7.13.orig/arch/mips/qemu/q-setup.c 2006-09-08 20:23:25.000000000 -07002793 +++ linux-2.6.1 7.13/arch/mips/qemu/q-setup.c 2006-09-09 10:17:04.000000000 -07002794 @@ -2,6 +2, 8@@2578 diff -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 @@ 2795 2582 #include <asm/io.h> 2796 2583 #include <asm/time.h> 2797 2584 2798 2585 +extern void qvga_init(void); 2799 + 2586 extern void qemu_reboot_setup(void); 2587 2800 2588 #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) 2805 2591 { 2806 2592 set_io_port_base(QEMU_PORT_BASE); … … 2808 2594 + qvga_init(); 2809 2595 +#endif 2810 board_timer_setup = qemu_timer_setup; 2596 + 2597 qemu_reboot_setup(); 2811 2598 } 2812 diff -Naur linux-2.6.1 7.13.orig/arch/mips/qemu/q-vga.c linux-2.6.17.13/arch/mips/qemu/q-vga.c2813 --- linux-2.6.1 7.13.orig/arch/mips/qemu/q-vga.c 1969-12-31 16:00:00.000000000 -08002814 +++ linux-2.6.1 7.13/arch/mips/qemu/q-vga.c 2006-09-09 10:17:04.000000000 -07002815 @@ -0,0 +1,18 8@@2599 diff -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 @@ 2816 2603 +/* 2817 2604 + * This file is subject to the terms and conditions of the GNU General Public … … 2824 2611 + */ 2825 2612 +#include <linux/init.h> 2613 +#include <linux/screen_info.h> 2826 2614 +#include <linux/tty.h> 2827 2615 +#include <asm/io.h> … … 3002 2790 +#endif 3003 2791 +} 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 @@ 2792 diff -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 } 3032 2828 } 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 } 2829 diff -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; 3189 2839 - 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 @@ 3287 2855 mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), 3288 2856 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 } 3300 2861 } 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 2862 diff -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 3326 2865 @@ -0,0 +1,266 @@ 3327 2866 +/* … … 3591 3130 +module_init(au1000gpio_init); 3592 3131 +module_exit(au1000gpio_exit); 3593 diff -Naur linux-2.6.1 7.13.orig/drivers/char/au1000_ts.c linux-2.6.17.13/drivers/char/au1000_ts.c3594 --- linux-2.6.1 7.13.orig/drivers/char/au1000_ts.c 1969-12-31 16:00:00.000000000 -08003595 +++ linux-2.6.1 7.13/drivers/char/au1000_ts.c 2006-09-09 10:17:04.000000000 -07003132 diff -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 3596 3135 @@ -0,0 +1,677 @@ 3597 3136 +/* … … 4272 3811 +module_init(au1000ts_init_module); 4273 3812 +module_exit(au1000ts_cleanup_module); 4274 diff -Naur linux-2.6.1 7.13.orig/drivers/char/au1000_usbraw.c linux-2.6.17.13/drivers/char/au1000_usbraw.c4275 --- linux-2.6.1 7.13.orig/drivers/char/au1000_usbraw.c 1969-12-31 16:00:00.000000000 -08004276 +++ linux-2.6.1 7.13/drivers/char/au1000_usbraw.c 2006-09-09 10:17:04.000000000 -07003813 diff -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 4277 3816 @@ -0,0 +1,573 @@ 4278 3817 +/* … … 4849 4388 +module_init(usbfn_raw_init); 4850 4389 +module_exit(usbfn_raw_exit); 4851 diff -Naur linux-2.6.1 7.13.orig/drivers/char/au1000_usbtty.c linux-2.6.17.13/drivers/char/au1000_usbtty.c4852 --- linux-2.6.1 7.13.orig/drivers/char/au1000_usbtty.c 1969-12-31 16:00:00.000000000 -08004853 +++ linux-2.6.1 7.13/drivers/char/au1000_usbtty.c 2006-09-09 10:17:04.000000000 -07004390 diff -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 4854 4393 @@ -0,0 +1,761 @@ 4855 4394 +/* … … 5614 5153 +module_init(usbfn_tty_init); 5615 5154 +module_exit(usbfn_tty_exit); 5616 diff -Naur linux-2.6.1 7.13.orig/drivers/char/decserial.c linux-2.6.17.13/drivers/char/decserial.c5617 --- linux-2.6.1 7.13.orig/drivers/char/decserial.c 2006-09-08 20:23:25.000000000 -07005618 +++ linux-2.6.1 7.13/drivers/char/decserial.c 2006-09-09 10:17:04.000000000 -07005619 @@ -14,8 7 +14,85@@5155 diff -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 @@ 5620 5159 * device. Added support for PROM console in drivers/char/tty_io.c 5621 5160 * instead. Although it may work to enable more than one … … 5625 5164 */ 5626 5165 5627 #include <linux/config.h>5628 5166 +#include <linux/errno.h> 5629 5167 #include <linux/init.h> … … 5751 5289 5752 5290 #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 @@ 5291 diff -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 @@ 6104 5295 To compile this driver as a module, choose M here: the 6105 5296 module will be called istallion. … … 6183 5374 Images of Qtronix keyboards are at 6184 5375 <http://www.qtronix.com/keyboard.html>. 6185 @@ -3 68,7 +413,7 @@5376 @@ -385,7 +430,7 @@ 6186 5377 6187 5378 config IT8172_SCR0 … … 6192 5383 Say Y here to support smart-card reader 0 (SCR0) on the Integrated 6193 5384 Technology Express, Inc. ITE8172 SBC. Vendor page at 6194 @@ -3 77,13 +422,17 @@5385 @@ -394,13 +439,17 @@ 6195 5386 6196 5387 config IT8172_SCR1 … … 6211 5402 tristate "Commodore A2232 serial support (EXPERIMENTAL)" 6212 5403 depends on EXPERIMENTAL && ZORRO && BROKEN_ON_SMP 6213 diff -Naur linux-2.6.1 7.13.orig/drivers/char/Makefile linux-2.6.17.13/drivers/char/Makefile6214 --- linux-2.6.1 7.13.orig/drivers/char/Makefile 2006-09-08 20:23:25.000000000 -07006215 +++ linux-2.6.1 7.13/drivers/char/Makefile 2006-09-09 10:17:04.000000000 -07005404 diff -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 6216 5407 @@ -31,6 +31,7 @@ 6217 5408 obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o … … 6231 5422 obj-$(CONFIG_TIPAR) += tipar.o 6232 5423 @@ -78,6 +80,10 @@ 6233 obj-$(CONFIG_HW_RANDOM) += hw_random .o5424 obj-$(CONFIG_HW_RANDOM) += hw_random/ 6234 5425 obj-$(CONFIG_FTAPE) += ftape/ 6235 5426 obj-$(CONFIG_COBALT_LCD) += lcd.o … … 6241 5432 obj-$(CONFIG_NWBUTTON) += nwbutton.o 6242 5433 obj-$(CONFIG_NWFLASH) += nwflash.o 6243 diff -Naur linux-2.6.1 7.13.orig/drivers/char/qtronix.c linux-2.6.17.13/drivers/char/qtronix.c6244 --- linux-2.6.1 7.13.orig/drivers/char/qtronix.c 2006-09-08 20:23:25.000000000 -07006245 +++ linux-2.6.1 7.13/drivers/char/qtronix.c 2006-09-09 10:17:04.000000000 -07006246 @@ -53 5,8 +535,7 @@5434 diff -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 @@ 6247 5438 i--; 6248 5439 } … … 6254 5445 } 6255 5446 if (signal_pending(current)) 6256 diff -Naur linux-2.6.1 7.13.orig/drivers/char/rtc.c linux-2.6.17.13/drivers/char/rtc.c6257 --- linux-2.6.1 7.13.orig/drivers/char/rtc.c 2006-09-08 20:23:25.000000000 -07006258 +++ linux-2.6.1 7.13/drivers/char/rtc.c 2006-09-09 10:17:04.000000000 -07006259 @@ -35, 23 +35,22@@5447 diff -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 @@ 6260 5451 * 1.09a Pete Zaitcev: Sun SPARC 6261 5452 * 1.09b Jeff Garzik: Modularize, init cleanup … … 6275 5466 + * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer 6276 5467 * 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. 6278 5469 * 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 @@ 5470 diff -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 @@ 6374 5474 +/* 6375 5475 + * Copyright (C) 2000,2001,2002,2003,2004 Broadcom Corporation … … 7137 6237 + sb1250_duart_driver->owner = THIS_MODULE; 7138 6238 + sb1250_duart_driver->name = "duart"; 7139 + sb1250_duart_driver->devfs_name = "duart/";7140 6239 + sb1250_duart_driver->major = TTY_MAJOR; 7141 6240 + sb1250_duart_driver->minor_start = SB1250_DUART_MINOR_BASE; … … 7283 6382 + 7284 6383 +#endif /* CONFIG_SIBYTE_SB1250_DUART_CONSOLE */ 7285 diff -Naur linux-2.6.1 7.13.orig/drivers/ide/mips/Makefile linux-2.6.17.13/drivers/ide/mips/Makefile7286 --- linux-2.6.1 7.13.orig/drivers/ide/mips/Makefile 2006-09-08 20:23:25.000000000 -07007287 +++ linux-2.6.1 7.13/drivers/ide/mips/Makefile 2006-09-09 10:17:04.000000000 -07006384 diff -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 7288 6387 @@ -1,4 +1,4 @@ 7289 6388 obj-$(CONFIG_BLK_DEV_IDE_SWARM) += swarm.o … … 7292 6391 -EXTRA_CFLAGS := -Idrivers/ide 7293 6392 +CFLAGS_au1xxx-ide.o := -Idrivers/ide 7294 diff -Naur linux-2.6.1 7.13.orig/drivers/mtd/devices/docprobe.c linux-2.6.17.13/drivers/mtd/devices/docprobe.c7295 --- linux-2.6.1 7.13.orig/drivers/mtd/devices/docprobe.c 2006-09-08 20:23:25.000000000 -07007296 +++ linux-2.6.1 7.13/drivers/mtd/devices/docprobe.c 2006-09-09 10:17:04.000000000 -07007297 @@ -8 4,10 +84,10 @@6393 diff -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 @@ 7298 6397 0xe4000000, 7299 6398 #elif defined(CONFIG_MOMENCO_OCELOT) … … 7309 6408 #endif 7310 6409 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 6410 diff -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 7340 6413 @@ -299,6 +299,18 @@ 7341 6414 Mapping for the Flaga digital module. If you don't have one, ignore … … 7357 6430 tristate "CFI Flash device mapped on IBM 405LP Beech" 7358 6431 depends on MTD_CFI && BEECH 7359 diff -Naur linux-2.6.1 7.13.orig/drivers/mtd/maps/lasat.c linux-2.6.17.13/drivers/mtd/maps/lasat.c7360 --- linux-2.6.1 7.13.orig/drivers/mtd/maps/lasat.c 2006-09-08 20:23:25.000000000 -07007361 +++ linux-2.6.1 7.13/drivers/mtd/maps/lasat.c 2006-09-09 10:17:04.000000000 -07006432 diff -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 7362 6435 @@ -7,7 +7,7 @@ 7363 6436 * modify it under the terms of the GNU General Public License version … … 7369 6442 */ 7370 6443 7371 @@ - 50,7 +50,7 @@6444 @@ -49,7 +49,7 @@ 7372 6445 ENABLE_VPP((&lasat_map)); 7373 6446 … … 7378 6451 lasat_map.size = lasat_board_info.li_flash_size; 7379 6452 7380 diff -Naur linux-2.6.1 7.13.orig/drivers/net/big_sur_ge.c linux-2.6.17.13/drivers/net/big_sur_ge.c7381 --- linux-2.6.1 7.13.orig/drivers/net/big_sur_ge.c 1969-12-31 16:00:00.000000000 -08007382 +++ linux-2.6.1 7.13/drivers/net/big_sur_ge.c 2006-09-09 10:17:04.000000000 -07006453 diff -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 7383 6456 @@ -0,0 +1,2005 @@ 7384 6457 +/* … … 9387 8460 +MODULE_DESCRIPTION("PMC-Sierra Big Sur Ethernet MAC Driver"); 9388 8461 +MODULE_LICENSE("GPL"); 9389 diff -Naur linux-2.6.1 7.13.orig/drivers/net/big_sur_ge.h linux-2.6.17.13/drivers/net/big_sur_ge.h9390 --- linux-2.6.1 7.13.orig/drivers/net/big_sur_ge.h 1969-12-31 16:00:00.000000000 -08009391 +++ linux-2.6.1 7.13/drivers/net/big_sur_ge.h 2006-09-09 10:17:04.000000000 -07008462 diff -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 9392 8465 @@ -0,0 +1,713 @@ 9393 8466 +/* … … 10104 9177 + 10105 9178 +#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 9179 diff -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 10140 9182 @@ -0,0 +1,1672 @@ 10141 9183 +/* … … 11811 10853 + return &gp->stats; 11812 10854 +} 11813 diff -Naur linux-2.6.1 7.13.orig/drivers/net/gt64240eth.h linux-2.6.17.13/drivers/net/gt64240eth.h11814 --- linux-2.6.1 7.13.orig/drivers/net/gt64240eth.h 2006-09-08 20:23:25.000000000 -070011815 +++ linux-2.6.1 7.13/drivers/net/gt64240eth.h 2006-09-09 10:17:04.000000000 -070010855 diff -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 11816 10858 @@ -9,6 +9,7 @@ 11817 10859 * Copyright 2000 MontaVista Software Inc. … … 11854 10896 /* Bit definitions of the SMI Reg */ 11855 10897 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 10898 diff -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) 11027 diff -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 11859 11030 @@ -438,6 +438,14 @@ 11860 11031 This is the driver for the onboard card of MIPS Magnum 4000, … … 11872 11043 bool "MIPS GT96100 Ethernet support" 11873 11044 depends on NET_ETHERNET && MIPS_GT96100 11874 @@ -45 2,10 +460,6 @@11045 @@ -453,10 +461,6 @@ 11875 11046 If you have an Alchemy Semi AU1X00 based system 11876 11047 say Y. Otherwise, say N. … … 11883 11054 bool "SGI IOC3 Ethernet" 11884 11055 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 11889 11074 +config MIPS_SIM_NET 11890 11075 + tristate "MIPS simulator Network device (EXPERIMENTAL)" 11891 11076 + 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. 11893 11082 + The MIPSNET device is a simple Ethernet network device which is 11894 11083 + emulated by the MIPS Simulator. 11895 11084 + 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 @@ 11901 11089 11902 11090 If in doubt, say N. … … 11909 11097 bool "VLAN support" 11910 11098 depends on R8169 && VLAN_8021Q 11911 @@ -2 195,8 +2211,8 @@11099 @@ -2266,8 +2262,8 @@ 11912 11100 select MII 11913 11101 help … … 11920 11108 config MV643XX_ETH_0 11921 11109 bool "MV-643XX Port 0" 11922 @@ -22 19,6 +2235,20 @@11110 @@ -2290,6 +2286,20 @@ 11923 11111 This enables support for Port 2 of the Marvell MV643XX Gigabit 11924 11112 Ethernet. … … 11941 11129 11942 11130 # 11943 diff -Naur linux-2.6.1 7.13.orig/drivers/net/Makefile linux-2.6.17.13/drivers/net/Makefile11944 --- linux-2.6.1 7.13.orig/drivers/net/Makefile 2006-09-08 20:23:25.000000000 -070011945 +++ linux-2.6.1 7.13/drivers/net/Makefile 2006-09-09 10:17:04.000000000 -070011946 @@ -11 1,6 +111,11 @@11131 diff -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 @@ 11947 11135 11948 11136 obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o … … 11956 11144 obj-$(CONFIG_PPP_ASYNC) += ppp_async.o 11957 11145 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 11146 diff -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 11987 11149 @@ -0,0 +1,2071 @@ 11988 11150 +/* … … 14057 13219 +module_init(titan_ge_init_module); 14058 13220 +module_exit(titan_ge_cleanup_module); 14059 diff -Naur linux-2.6.1 7.13.orig/drivers/net/titan_ge.h linux-2.6.17.13/drivers/net/titan_ge.h14060 --- linux-2.6.1 7.13.orig/drivers/net/titan_ge.h 1969-12-31 16:00:00.000000000 -080014061 +++ linux-2.6.1 7.13/drivers/net/titan_ge.h 2006-09-09 10:17:04.000000000 -070013221 diff -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 14062 13224 @@ -0,0 +1,417 @@ 14063 13225 +#ifndef _TITAN_GE_H_ … … 14478 13640 +#endif /* _TITAN_GE_H_ */ 14479 13641 + 14480 diff -Naur linux-2.6.1 7.13.orig/drivers/net/titan_mdio.c linux-2.6.17.13/drivers/net/titan_mdio.c14481 --- linux-2.6.1 7.13.orig/drivers/net/titan_mdio.c 1969-12-31 16:00:00.000000000 -080014482 +++ linux-2.6.1 7.13/drivers/net/titan_mdio.c 2006-09-09 10:17:04.000000000 -070013642 diff -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 14483 13645 @@ -0,0 +1,217 @@ 14484 13646 +/* … … 14699 13861 +} 14700 13862 + 14701 diff -Naur linux-2.6.1 7.13.orig/drivers/net/titan_mdio.h linux-2.6.17.13/drivers/net/titan_mdio.h14702 --- linux-2.6.1 7.13.orig/drivers/net/titan_mdio.h 1969-12-31 16:00:00.000000000 -080014703 +++ linux-2.6.1 7.13/drivers/net/titan_mdio.h 2006-09-09 10:17:04.000000000 -070013863 diff -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 14704 13866 @@ -0,0 +1,56 @@ 14705 13867 +/* … … 14759 13921 + 14760 13922 +#endif /* _TITAN_MDIO_H */ 14761 diff -Naur linux-2.6.1 7.13.orig/drivers/scsi/dec_esp.c linux-2.6.17.13/drivers/scsi/dec_esp.c14762 --- linux-2.6.1 7.13.orig/drivers/scsi/dec_esp.c 2006-09-08 20:23:25.000000000 -070014763 +++ linux-2.6.1 7.13/drivers/scsi/dec_esp.c 2006-09-09 10:17:04.000000000 -070013923 diff -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 14764 13926 @@ -55,7 +55,7 @@ 14765 13927 … … 14780 13942 esp->dregs = 0; 14781 13943 esp->eregs = (void *)CKSEG1ADDR(mem_start + 14782 diff -Naur linux-2.6.1 7.13.orig/drivers/scsi/NCR53C9x.h linux-2.6.17.13/drivers/scsi/NCR53C9x.h14783 --- linux-2.6.1 7.13.orig/drivers/scsi/NCR53C9x.h 2006-09-08 20:23:25.000000000 -070014784 +++ linux-2.6.1 7.13/drivers/scsi/NCR53C9x.h 2006-09-09 10:17:04.000000000 -070014785 @@ -14 5,12 +145,7 @@13944 diff -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 @@ 14786 13948 14787 13949 #ifndef MULTIPLE_PAD_SIZES … … 14797 13959 14798 13960 struct ESP_regs { 14799 diff -Naur linux-2.6.1 7.13.orig/drivers/scsi/sgiwd93.c linux-2.6.17.13/drivers/scsi/sgiwd93.c14800 --- linux-2.6.1 7.13.orig/drivers/scsi/sgiwd93.c 2006-09-08 20:23:25.000000000 -070014801 +++ linux-2.6.1 7.13/drivers/scsi/sgiwd93.c 2006-09-09 10:17:04.000000000 -070013961 diff -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 14802 13964 @@ -14,6 +14,7 @@ 14803 13965 #include <linux/interrupt.h> … … 14816 13978 static inline void init_hpc_chain(struct hpc_data *hd) 14817 13979 { 14818 diff -Naur linux-2.6.1 7.13.orig/drivers/serial/ip22zilog.c linux-2.6.17.13/drivers/serial/ip22zilog.c14819 --- linux-2.6.1 7.13.orig/drivers/serial/ip22zilog.c 2006-09-08 20:23:25.000000000 -070014820 +++ linux-2.6.1 7.13/drivers/serial/ip22zilog.c 2006-09-09 10:17:04.000000000 -070014821 @@ -86 6,6 +866,7 @@13980 diff -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 @@ 14822 13984 up->cflag = termios->c_cflag; 14823 13985 … … 14827 13989 spin_unlock_irqrestore(&up->port.lock, flags); 14828 13990 } 14829 @@ -102 7,6 +1028,8 @@13991 @@ -1026,6 +1027,8 @@ 14830 13992 } 14831 13993 … … 14836 13998 14837 13999 static int __init ip22zilog_console_setup(struct console *con, char *options) 14838 diff -Naur linux-2.6.1 7.13.orig/drivers/serial/ip3106_uart.c linux-2.6.17.13/drivers/serial/ip3106_uart.c14839 --- linux-2.6.1 7.13.orig/drivers/serial/ip3106_uart.c 1969-12-31 16:00:00.000000000 -080014840 +++ linux-2.6.1 7.13/drivers/serial/ip3106_uart.c 2006-09-09 10:17:04.000000000 -070014000 diff -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 14841 14003 @@ -0,0 +1,912 @@ 14842 14004 +/* … … 15752 14914 +MODULE_LICENSE("GPL"); 15753 14915 +MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_IP3106_MAJOR); 15754 diff -Naur linux-2.6.1 7.13.orig/drivers/serial/Kconfig linux-2.6.17.13/drivers/serial/Kconfig15755 --- linux-2.6.1 7.13.orig/drivers/serial/Kconfig 2006-09-08 20:23:25.000000000 -070015756 +++ linux-2.6.1 7.13/drivers/serial/Kconfig 2006-09-09 10:17:04.000000000 -070015757 @@ -6 47,6 +647,25 @@14916 diff -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 @@ 15758 14920 depends on SERIAL_SH_SCI=y 15759 14921 select SERIAL_CORE_CONSOLE … … 15781 14943 tristate 15782 14944 15783 diff -Naur linux-2.6.1 7.13.orig/drivers/serial/Makefile linux-2.6.17.13/drivers/serial/Makefile15784 --- linux-2.6.1 7.13.orig/drivers/serial/Makefile 2006-09-08 20:23:25.000000000 -070015785 +++ linux-2.6.1 7.13/drivers/serial/Makefile 2006-09-09 10:17:04.000000000 -070014945 diff -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 15786 14948 @@ -39,6 +39,7 @@ 15787 14949 obj-$(CONFIG_V850E_UART) += v850e_uart.o … … 15792 14954 obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o 15793 14955 obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o 15794 diff -Naur linux-2.6.1 7.13.orig/drivers/usb/gadget/net2280.c linux-2.6.17.13/drivers/usb/gadget/net2280.c15795 --- linux-2.6.1 7.13.orig/drivers/usb/gadget/net2280.c 2006-09-08 20:23:25.000000000 -070015796 +++ linux-2.6.1 7.13/drivers/usb/gadget/net2280.c 2006-09-09 10:17:04.000000000 -070015797 @@ -46 8,7 +468,8 @@14956 diff -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 @@ 15798 14960 #elif defined(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE) 15799 14961 #define USE_KMALLOC … … 15805 14967 15806 14968 /* FIXME there are other cases, including an x86-64 one ... */ 15807 diff -Naur linux-2.6.1 7.13.orig/drivers/usb/host/ohci-hcd.c linux-2.6.17.13/drivers/usb/host/ohci-hcd.c15808 --- linux-2.6.1 7.13.orig/drivers/usb/host/ohci-hcd.c 2006-09-08 20:23:25.000000000 -070015809 +++ linux-2.6.1 7.13/drivers/usb/host/ohci-hcd.c 2006-09-09 10:17:04.000000000 -070015810 @@ -90 6,6 +906,10 @@14969 diff -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 @@ 15811 14973 #include "ohci-au1xxx.c" 15812 14974 #endif … … 15819 14981 #include "ohci-ppc-soc.c" 15820 14982 #endif 15821 diff -Naur linux-2.6.1 7.13.orig/drivers/usb/host/ohci-pnx8550.c linux-2.6.17.13/drivers/usb/host/ohci-pnx8550.c15822 --- linux-2.6.1 7.13.orig/drivers/usb/host/ohci-pnx8550.c 1969-12-31 16:00:00.000000000 -080015823 +++ linux-2.6.1 7.13/drivers/usb/host/ohci-pnx8550.c 2006-09-09 10:17:04.000000000 -070014983 diff -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 15824 14986 @@ -0,0 +1,277 @@ 15825 14987 +/* … … 16100 15262 +module_init (ohci_hcd_pnx8550_init); 16101 15263 +module_exit (ohci_hcd_pnx8550_cleanup); 16102 diff -Naur linux-2.6.1 7.13.orig/drivers/video/au1100fb.c linux-2.6.17.13/drivers/video/au1100fb.c16103 --- linux-2.6.1 7.13.orig/drivers/video/au1100fb.c 2006-09-08 20:23:25.000000000 -070016104 +++ linux-2.6.1 7.13/drivers/video/au1100fb.c 2006-09-09 10:17:04.000000000 -070016105 @@ - 38,6 +38,7 @@15264 diff -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 @@ 16106 15268 * with this program; if not, write to the Free Software Foundation, Inc., 16107 15269 * 675 Mass Ave, Cambridge, MA 02139, USA. 16108 15270 */ 16109 15271 + 16110 #include <linux/config.h>16111 15272 #include <linux/module.h> 16112 15273 #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> 15275 diff -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 @@ 16117 15279 Please read the <file:Documentation/fb/README-sstfb.txt> for supported 16118 15280 options and other important info support. … … 16132 15294 tristate "Cyberblade/i1 support" 16133 15295 depends on FB && PCI && X86_32 && !64BIT 16134 @@ -1 206,7 +1217,25 @@15296 @@ -1314,7 +1325,25 @@ 16135 15297 16136 15298 config FB_AU1100 … … 16159 15321 config FB_AU1200 16160 15322 bool "Au1200 LCD Driver" 16161 @@ -1 322,8 +1351,8 @@15323 @@ -1430,8 +1459,8 @@ 16162 15324 select FB_CFB_IMAGEBLIT 16163 15325 help … … 16170 15332 config FB_MAXINE 16171 15333 bool "Maxine (Personal DECstation) onboard framebuffer support" 16172 diff -Naur linux-2.6.1 7.13.orig/drivers/video/Makefile linux-2.6.17.13/drivers/video/Makefile16173 --- linux-2.6.1 7.13.orig/drivers/video/Makefile 2006-09-08 20:23:25.000000000 -070016174 +++ linux-2.6.1 7.13/drivers/video/Makefile 2006-09-09 10:17:04.000000000 -070016175 @@ -9 3,6 +93,7 @@15334 diff -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 @@ 16176 15338 obj-$(CONFIG_FB_TX3912) += tx3912fb.o 16177 15339 obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o … … 16179 15341 +obj-$(CONFIG_FB_SMIVGX) += smivgxfb.o 16180 15342 obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o 16181 16182 # Platform or fallback drivers go here16183 diff -Naur linux-2.6.1 7.13.orig/drivers/video/smivgxfb.c linux-2.6.17.13/drivers/video/smivgxfb.c16184 --- linux-2.6.1 7.13.orig/drivers/video/smivgxfb.c 1969-12-31 16:00:00.000000000 -080016185 +++ linux-2.6.1 7.13/drivers/video/smivgxfb.c 2006-09-09 10:17:04.000000000 -070015343 obj-$(CONFIG_FB_PNX4008_DUM) += pnx4008/ 15344 obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/ 15345 diff -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 16186 15348 @@ -0,0 +1,387 @@ 16187 15349 +/*************************************************************************** … … 16572 15734 +MODULE_DESCRIPTION("Framebuffer driver for SMI Voyager"); 16573 15735 +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 15736 diff -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 16673 15739 @@ -21,7 +21,6 @@ 16674 15740 * - flush_cache_range(vma, start, end) flushes a range of pages … … 16729 15795 extern void (*flush_cache_sigtramp)(unsigned long addr); 16730 15796 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 @@ 15797 diff -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 @@ 16780 15801 * fix-mapped? 16781 15802 */ … … 16795 15816 #endif 16796 15817 __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 @@ 16799 15819 * at the top of mem.. 16800 15820 */ 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 16801 15825 -#define FIXADDR_TOP (0xffffe000UL) 16802 +#define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000) 15826 +#define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000) 15827 #endif 16803 15828 #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) 16804 15829 #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) \n" \ 16850 + "2: sc $1, %2 \n" \ 16851 " beqz $1, 1b \n" \ 16852 __FUTEX_SMP_SYNC \ 16853 "3: \n" \ 16854 " .set pop \n" \ 16855 " .set mips0 \n" \ 16856 " .section .fixup,\"ax\" \n" \ 16857 - "4: li %0, %5 \n" \ 16858 + "4: li %0, %6 \n" \ 16859 " j 2b \n" \ 16860 " .previous \n" \ 16861 " .section __ex_table,\"a\" \n" \ 16862 " "__UA_ADDR "\t1b, 4b \n" \ 16863 " "__UA_ADDR "\t2b, 4b \n" \ 16864 " .previous \n" \ 16865 - : "=r" (ret), "=r" (oldval) \ 16866 - : "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT)); \ 16867 + : "=r" (ret), "=&r" (oldval), "=R" (*uaddr) \ 16868 + : "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT) \ 16869 + : "memory"); \ 16870 } else \ 16871 ret = -ENOSYS; \ 16872 } 16873 @@ -89,23 +91,23 @@ 16874 16875 switch (op) { 16876 case FUTEX_OP_SET: 16877 - __futex_atomic_op("move $1, %z4", ret, oldval, uaddr, oparg); 16878 + __futex_atomic_op("move $1, %z5", ret, oldval, uaddr, oparg); 16879 break; 16880 16881 case FUTEX_OP_ADD: 16882 - __futex_atomic_op("addu $1, %1, %z4", 16883 + __futex_atomic_op("addu $1, %1, %z5", 16884 ret, oldval, uaddr, oparg); 16885 break; 16886 case FUTEX_OP_OR: 16887 - __futex_atomic_op("or $1, %1, %z4", 16888 + __futex_atomic_op("or $1, %1, %z5", 16889 ret, oldval, uaddr, oparg); 16890 break; 16891 case FUTEX_OP_ANDN: 16892 - __futex_atomic_op("and $1, %1, %z4", 16893 + __futex_atomic_op("and $1, %1, %z5", 16894 ret, oldval, uaddr, ~oparg); 16895 break; 16896 case FUTEX_OP_XOR: 16897 - __futex_atomic_op("xor $1, %1, %z4", 16898 + __futex_atomic_op("xor $1, %1, %z5", 16899 ret, oldval, uaddr, oparg); 16900 break; 16901 default: 16902 diff -Naur linux-2.6.17.13.orig/include/asm-mips/hazards.h linux-2.6.17.13/include/asm-mips/hazards.h 16903 --- linux-2.6.17.13.orig/include/asm-mips/hazards.h 2006-09-08 20:23:25.000000000 -0700 16904 +++ linux-2.6.17.13/include/asm-mips/hazards.h 2006-09-09 10:17:04.000000000 -0700 16905 @@ -70,10 +70,10 @@ 16906 * Use a macro for ehb unless explicit support for MIPSR2 is enabled 16907 */ 16908 16909 -#define irq_enable_hazard 16910 +#define irq_enable_hazard \ 16911 _ehb 16912 16913 -#define irq_disable_hazard 16914 +#define irq_disable_hazard \ 16915 _ehb 16916 16917 #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000) 16918 diff -Naur linux-2.6.17.13.orig/include/asm-mips/inst.h linux-2.6.17.13/include/asm-mips/inst.h 16919 --- linux-2.6.17.13.orig/include/asm-mips/inst.h 2006-09-08 20:23:25.000000000 -0700 16920 +++ linux-2.6.17.13/include/asm-mips/inst.h 2006-09-09 10:17:04.000000000 -0700 16921 @@ -74,7 +74,7 @@ 16922 ins_op, dinsm_op, dinsu_op, dins_op, 16923 bshfl_op = 0x20, 16924 dbshfl_op = 0x24, 16925 - rdhwr_op = 0x3f 16926 + rdhwr_op = 0x3b 16927 }; 16928 16929 /* 16930 diff -Naur linux-2.6.17.13.orig/include/asm-mips/io.h linux-2.6.17.13/include/asm-mips/io.h 16931 --- linux-2.6.17.13.orig/include/asm-mips/io.h 2006-09-08 20:23:25.000000000 -0700 16932 +++ linux-2.6.17.13/include/asm-mips/io.h 2006-09-09 10:17:04.000000000 -0700 16933 @@ -519,34 +519,6 @@ 15830 diff -Naur linux-2.6.18/include/asm-mips/io.h linux-2.6.18.mips/include/asm-mips/io.h 15831 --- linux-2.6.18/include/asm-mips/io.h 2006-09-19 20:42:06.000000000 -0700 15832 +++ linux-2.6.18.mips/include/asm-mips/io.h 2006-09-20 06:55:21.000000000 -0700 15833 @@ -518,34 +518,6 @@ 16934 15834 } 16935 15835 … … 16966 15866 * to explicitly ioremap() it. The fact that the ISA IO space is mapped 16967 15867 * to PAGE_OFFSET is pure coincidence - it does not mean ISA values 16968 diff -Naur linux-2.6.1 7.13.orig/include/asm-mips/irq.h linux-2.6.17.13/include/asm-mips/irq.h16969 --- linux-2.6.1 7.13.orig/include/asm-mips/irq.h 2006-09-08 20:23:25.000000000 -070016970 +++ linux-2.6.1 7.13/include/asm-mips/irq.h 2006-09-09 10:17:04.000000000 -070016971 @@ -7 7,4 +77,8@@15868 diff -Naur linux-2.6.18/include/asm-mips/irq.h linux-2.6.18.mips/include/asm-mips/irq.h 15869 --- linux-2.6.18/include/asm-mips/irq.h 2006-09-19 20:42:06.000000000 -0700 15870 +++ linux-2.6.18.mips/include/asm-mips/irq.h 2006-09-20 06:55:21.000000000 -0700 15871 @@ -76,8 +76,4 @@ 16972 15872 unsigned long hwmask); 16973 15873 #endif /* CONFIG_MIPS_MT_SMTC */ 16974 15874 16975 +#ifdef CONFIG_SMP16976 +#define ARCH_HAS_IRQ_PER_CPU16977 +#endif16978 + 15875 -#ifdef CONFIG_SMP 15876 -#define ARCH_HAS_IRQ_PER_CPU 15877 -#endif 15878 - 16979 15879 #endif /* _ASM_IRQ_H */ 16980 diff -Naur linux-2.6.17.13.orig/include/asm-mips/mach-au1x00/au1xxx_ide.h linux-2.6.17.13/include/asm-mips/mach-au1x00/au1xxx_ide.h 16981 --- linux-2.6.17.13.orig/include/asm-mips/mach-au1x00/au1xxx_ide.h 2006-09-08 20:23:25.000000000 -0700 16982 +++ linux-2.6.17.13/include/asm-mips/mach-au1x00/au1xxx_ide.h 2006-09-09 10:17:04.000000000 -0700 16983 @@ -84,6 +84,7 @@ 15880 diff -Naur linux-2.6.18/include/asm-mips/Kbuild linux-2.6.18.mips/include/asm-mips/Kbuild 15881 --- linux-2.6.18/include/asm-mips/Kbuild 2006-09-19 20:42:06.000000000 -0700 15882 +++ linux-2.6.18.mips/include/asm-mips/Kbuild 2006-09-20 06:55:21.000000000 -0700 15883 @@ -1 +1,3 @@ 15884 include include/asm-generic/Kbuild.asm 15885 + 15886 +header-y += sgidefs.h 15887 diff -Naur linux-2.6.18/include/asm-mips/mach-atlas/mc146818rtc.h linux-2.6.18.mips/include/asm-mips/mach-atlas/mc146818rtc.h 15888 --- linux-2.6.18/include/asm-mips/mach-atlas/mc146818rtc.h 2006-09-19 20:42:06.000000000 -0700 15889 +++ linux-2.6.18.mips/include/asm-mips/mach-atlas/mc146818rtc.h 2006-09-20 06:55:21.000000000 -0700 15890 @@ -28,10 +28,12 @@ 15891 #include <asm/mips-boards/atlas.h> 15892 #include <asm/mips-boards/atlasint.h> 15893 15894 +#define ARCH_RTC_LOCATION 15895 + 15896 #define RTC_PORT(x) (ATLAS_RTC_ADR_REG + (x) * 8) 15897 #define RTC_IO_EXTENT 0x100 15898 #define RTC_IOMAPPED 0 15899 -#define RTC_IRQ ATLASINT_RTC 15900 +#define RTC_IRQ ATLAS_INT_RTC 15901 15902 static inline unsigned char CMOS_READ(unsigned long addr) 15903 { 15904 diff -Naur linux-2.6.18/include/asm-mips/mach-au1x00/au1xxx_ide.h linux-2.6.18.mips/include/asm-mips/mach-au1x00/au1xxx_ide.h 15905 --- linux-2.6.18/include/asm-mips/mach-au1x00/au1xxx_ide.h 2006-09-19 20:42:06.000000000 -0700 15906 +++ linux-2.6.18.mips/include/asm-mips/mach-au1x00/au1xxx_ide.h 2006-09-20 06:55:21.000000000 -0700 15907 @@ -83,6 +83,7 @@ 16984 15908 } _auide_hwif; 16985 15909 … … 16989 15913 static const struct drive_list_entry dma_white_list [] = { 16990 15914 /* 16991 diff -Naur linux-2.6.17.13.orig/include/asm-mips/mach-mips/irq.h linux-2.6.17.13/include/asm-mips/mach-mips/irq.h 16992 --- linux-2.6.17.13.orig/include/asm-mips/mach-mips/irq.h 2006-09-08 20:23:25.000000000 -0700 16993 +++ linux-2.6.17.13/include/asm-mips/mach-mips/irq.h 2006-09-09 10:17:04.000000000 -0700 16994 @@ -5,10 +5,4 @@ 16995 16996 #define NR_IRQS 256 16997 16998 -#ifdef CONFIG_SMP 16999 - 17000 -#define ARCH_HAS_IRQ_PER_CPU 17001 - 17002 -#endif 17003 - 17004 #endif /* __ASM_MACH_MIPS_IRQ_H */ 17005 diff -Naur linux-2.6.17.13.orig/include/asm-mips/mach-vr41xx/timex.h linux-2.6.17.13/include/asm-mips/mach-vr41xx/timex.h 17006 --- linux-2.6.17.13.orig/include/asm-mips/mach-vr41xx/timex.h 1969-12-31 16:00:00.000000000 -0800 17007 +++ linux-2.6.17.13/include/asm-mips/mach-vr41xx/timex.h 2006-09-09 10:17:04.000000000 -0700 17008 @@ -0,0 +1,18 @@ 15915 diff -Naur linux-2.6.18/include/asm-mips/mips-boards/atlasint.h linux-2.6.18.mips/include/asm-mips/mips-boards/atlasint.h 15916 --- linux-2.6.18/include/asm-mips/mips-boards/atlasint.h 2006-09-19 20:42:06.000000000 -0700 15917 +++ linux-2.6.18.mips/include/asm-mips/mips-boards/atlasint.h 2006-09-20 06:55:21.000000000 -0700 15918 @@ -1,6 +1,7 @@ 15919 /* 15920 - * Carsten Langgaard, carstenl@mips.com 15921 - * Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved. 15922 + * Copyright (C) 1999, 2006 MIPS Technologies, Inc. All rights reserved. 15923 + * Authors: Carsten Langgaard <carstenl@mips.com> 15924 + * Maciej W. Rozycki <macro@mips.com> 15925 * 15926 * ######################################################################## 15927 * 15928 @@ -25,41 +26,88 @@ 15929 #ifndef _MIPS_ATLASINT_H 15930 #define _MIPS_ATLASINT_H 15931 15932 -#define ATLASINT_BASE 1 15933 -#define ATLASINT_UART (ATLASINT_BASE+0) 15934 -#define ATLASINT_TIM0 (ATLASINT_BASE+1) 15935 -#define ATLASINT_RES2 (ATLASINT_BASE+2) 15936 -#define ATLASINT_RES3 (ATLASINT_BASE+3) 15937 -#define ATLASINT_RTC (ATLASINT_BASE+4) 15938 -#define ATLASINT_COREHI (ATLASINT_BASE+5) 15939 -#define ATLASINT_CORELO (ATLASINT_BASE+6) 15940 -#define ATLASINT_RES7 (ATLASINT_BASE+7) 15941 -#define ATLASINT_PCIA (ATLASINT_BASE+8) 15942 -#define ATLASINT_PCIB (ATLASINT_BASE+9) 15943 -#define ATLASINT_PCIC (ATLASINT_BASE+10) 15944 -#define ATLASINT_PCID (ATLASINT_BASE+11) 15945 -#define ATLASINT_ENUM (ATLASINT_BASE+12) 15946 -#define ATLASINT_DEG (ATLASINT_BASE+13) 15947 -#define ATLASINT_ATXFAIL (ATLASINT_BASE+14) 15948 -#define ATLASINT_INTA (ATLASINT_BASE+15) 15949 -#define ATLASINT_INTB (ATLASINT_BASE+16) 15950 -#define ATLASINT_ETH ATLASINT_INTB 15951 -#define ATLASINT_INTC (ATLASINT_BASE+17) 15952 -#define ATLASINT_SCSI ATLASINT_INTC 15953 -#define ATLASINT_INTD (ATLASINT_BASE+18) 15954 -#define ATLASINT_SERR (ATLASINT_BASE+19) 15955 -#define ATLASINT_RES20 (ATLASINT_BASE+20) 15956 -#define ATLASINT_RES21 (ATLASINT_BASE+21) 15957 -#define ATLASINT_RES22 (ATLASINT_BASE+22) 15958 -#define ATLASINT_RES23 (ATLASINT_BASE+23) 15959 -#define ATLASINT_RES24 (ATLASINT_BASE+24) 15960 -#define ATLASINT_RES25 (ATLASINT_BASE+25) 15961 -#define ATLASINT_RES26 (ATLASINT_BASE+26) 15962 -#define ATLASINT_RES27 (ATLASINT_BASE+27) 15963 -#define ATLASINT_RES28 (ATLASINT_BASE+28) 15964 -#define ATLASINT_RES29 (ATLASINT_BASE+29) 15965 -#define ATLASINT_RES30 (ATLASINT_BASE+30) 15966 -#define ATLASINT_RES31 (ATLASINT_BASE+31) 15967 -#define ATLASINT_END (ATLASINT_BASE+31) 17009 15968 +/* 17010 + * This file is subject to the terms and conditions of the GNU General Public 17011 + * License. See the file "COPYING" in the main directory of this archive 17012 + * for more details. 17013 + * 17014 + * Copyright (C) 2003 by Ralf Baechle 15969 + * Interrupts 0..7 are used for Atlas CPU interrupts (nonEIC mode) 17015 15970 + */ 15971 +#define MIPSCPU_INT_BASE 0 15972 + 15973 +/* CPU interrupt offsets */ 15974 +#define MIPSCPU_INT_SW0 0 15975 +#define MIPSCPU_INT_SW1 1 15976 +#define MIPSCPU_INT_MB0 2 15977 +#define MIPSCPU_INT_ATLAS MIPSCPU_INT_MB0 15978 +#define MIPSCPU_INT_MB1 3 15979 +#define MIPSCPU_INT_MB2 4 15980 +#define MIPSCPU_INT_MB3 5 15981 +#define MIPSCPU_INT_MB4 6 15982 +#define MIPSCPU_INT_CPUCTR 7 15983 + 17016 15984 +/* 17017 + * Changes: 17018 + * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 17019 + * - CLOCK_TICK_RATE is changed into 32768 from 6144000. 15985 + * Interrupts 8..39 are used for Atlas interrupt controller interrupts 17020 15986 + */ 17021 +#ifndef __ASM_MACH_VR41XX_TIMEX_H 17022 +#define __ASM_MACH_VR41XX_TIMEX_H 17023 + 17024 +#define CLOCK_TICK_RATE 32768 17025 + 17026 +#endif /* __ASM_MACH_VR41XX_TIMEX_H */ 17027 diff -Naur linux-2.6.17.13.orig/include/asm-mips/mipsregs.h linux-2.6.17.13/include/asm-mips/mipsregs.h 17028 --- linux-2.6.17.13.orig/include/asm-mips/mipsregs.h 2006-09-08 20:23:25.000000000 -0700 17029 +++ linux-2.6.17.13/include/asm-mips/mipsregs.h 2006-09-09 10:17:04.000000000 -0700 17030 @@ -1462,7 +1462,8 @@ 17031 static inline void __ehb(void) 17032 { 17033 __asm__ __volatile__( 17034 - " ehb \n"); 17035 + " .set mips32r2 \n" 17036 + " ehb \n" " .set mips0 \n"); 17037 } 17038 17039 /* 17040 diff -Naur linux-2.6.17.13.orig/include/asm-mips/mman.h linux-2.6.17.13/include/asm-mips/mman.h 17041 --- linux-2.6.17.13.orig/include/asm-mips/mman.h 2006-09-08 20:23:25.000000000 -0700 17042 +++ linux-2.6.17.13/include/asm-mips/mman.h 2006-09-09 10:17:04.000000000 -0700 17043 @@ -75,4 +75,13 @@ 17044 #define MAP_ANON MAP_ANONYMOUS 17045 #define MAP_FILE 0 17046 17047 +#ifdef __KERNEL__ 17048 + 17049 +#define arch_mmap_check mips_mmap_check 17050 + 17051 +extern int mips_mmap_check(unsigned long addr, unsigned long len, 17052 + unsigned long flags); 17053 + 17054 +#endif 17055 + 17056 #endif /* _ASM_MMAN_H */ 17057 diff -Naur linux-2.6.17.13.orig/include/asm-mips/page.h linux-2.6.17.13/include/asm-mips/page.h 17058 --- linux-2.6.17.13.orig/include/asm-mips/page.h 2006-09-08 20:23:25.000000000 -0700 17059 +++ linux-2.6.17.13/include/asm-mips/page.h 2006-09-09 10:17:04.000000000 -0700 17060 @@ -58,19 +58,17 @@ 15987 +#define ATLAS_INT_BASE 8 15988 +#define ATLAS_INT_UART (ATLAS_INT_BASE + 0) 15989 +#define ATLAS_INT_TIM0 (ATLAS_INT_BASE + 1) 15990 +#define ATLAS_INT_RES2 (ATLAS_INT_BASE + 2) 15991 +#define ATLAS_INT_RES3 (ATLAS_INT_BASE + 3) 15992 +#define ATLAS_INT_RTC (ATLAS_INT_BASE + 4) 15993 +#define ATLAS_INT_COREHI (ATLAS_INT_BASE + 5) 15994 +#define ATLAS_INT_CORELO (ATLAS_INT_BASE + 6) 15995 +#define ATLAS_INT_RES7 (ATLAS_INT_BASE + 7) 15996 +#define ATLAS_INT_PCIA (ATLAS_INT_BASE + 8) 15997 +#define ATLAS_INT_PCIB (ATLAS_INT_BASE + 9) 15998 +#define ATLAS_INT_PCIC (ATLAS_INT_BASE + 10) 15999 +#define ATLAS_INT_PCID (ATLAS_INT_BASE + 11) 16000 +#define ATLAS_INT_ENUM (ATLAS_INT_BASE + 12) 16001 +#define ATLAS_INT_DEG (ATLAS_INT_BASE + 13) 16002 +#define ATLAS_INT_ATXFAIL (ATLAS_INT_BASE + 14) 16003 +#define ATLAS_INT_INTA (ATLAS_INT_BASE + 15) 16004 +#define ATLAS_INT_INTB (ATLAS_INT_BASE + 16) 16005 +#define ATLAS_INT_ETH ATLAS_INT_INTB 16006 +#define ATLAS_INT_INTC (ATLAS_INT_BASE + 17) 16007 +#define ATLAS_INT_SCSI ATLAS_INT_INTC 16008 +#define ATLAS_INT_INTD (ATLAS_INT_BASE + 18) 16009 +#define ATLAS_INT_SERR (ATLAS_INT_BASE + 19) 16010 +#define ATLAS_INT_RES20 (ATLAS_INT_BASE + 20) 16011 +#define ATLAS_INT_RES21 (ATLAS_INT_BASE + 21) 16012 +#define ATLAS_INT_RES22 (ATLAS_INT_BASE + 22) 16013 +#define ATLAS_INT_RES23 (ATLAS_INT_BASE + 23) 16014 +#define ATLAS_INT_RES24 (ATLAS_INT_BASE + 24) 16015 +#define ATLAS_INT_RES25 (ATLAS_INT_BASE + 25) 16016 +#define ATLAS_INT_RES26 (ATLAS_INT_BASE + 26) 16017 +#define ATLAS_INT_RES27 (ATLAS_INT_BASE + 27) 16018 +#define ATLAS_INT_RES28 (ATLAS_INT_BASE + 28) 16019 +#define ATLAS_INT_RES29 (ATLAS_INT_BASE + 29) 16020 +#define ATLAS_INT_RES30 (ATLAS_INT_BASE + 30) 16021 +#define ATLAS_INT_RES31 (ATLAS_INT_BASE + 31) 16022 +#define ATLAS_INT_END (ATLAS_INT_BASE + 31) 16023 + 16024 +/* 16025 + * Interrupts 64..127 are used for Soc-