Commit 1cd013d0 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/davem/BK/sparc-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents fa8d24b9 26b39845
...@@ -22,8 +22,8 @@ extern void cpu_probe(void); ...@@ -22,8 +22,8 @@ extern void cpu_probe(void);
extern void clock_stop_probe(void); /* tadpole.c */ extern void clock_stop_probe(void); /* tadpole.c */
extern void sun4c_probe_memerr_reg(void); extern void sun4c_probe_memerr_reg(void);
unsigned long __init void __init
device_scan(unsigned long mem_start) device_scan(void)
{ {
char node_str[128]; char node_str[128];
int thismid; int thismid;
...@@ -37,46 +37,45 @@ device_scan(unsigned long mem_start) ...@@ -37,46 +37,45 @@ device_scan(unsigned long mem_start)
int scan; int scan;
scan = prom_getchild(prom_root_node); scan = prom_getchild(prom_root_node);
/* One can look it up in PROM instead */ /* One can look it up in PROM instead */
/* prom_printf("root child is %08lx\n", (unsigned long) scan); */ while ((scan = prom_getsibling(scan)) != 0) {
while((scan = prom_getsibling(scan)) != 0) { prom_getstring(scan, "device_type",
prom_getstring(scan, "device_type", node_str, sizeof(node_str)); node_str, sizeof(node_str));
if(strcmp(node_str, "cpu") == 0) { if (strcmp(node_str, "cpu") == 0) {
linux_cpus[linux_num_cpus].prom_node = scan; linux_cpus[linux_num_cpus].prom_node = scan;
prom_getproperty(scan, "mid", (char *) &thismid, sizeof(thismid)); prom_getproperty(scan, "mid",
(char *) &thismid, sizeof(thismid));
linux_cpus[linux_num_cpus].mid = thismid; linux_cpus[linux_num_cpus].mid = thismid;
/* prom_printf("Found CPU %d <node=%08lx,mid=%d>\n", linux_num_cpus, (unsigned long) scan, thismid); */ printk("Found CPU %d <node=%08lx,mid=%d>\n",
printk("Found CPU %d <node=%08lx,mid=%d>\n", linux_num_cpus, (unsigned long) scan, thismid); linux_num_cpus, (unsigned long) scan, thismid);
linux_num_cpus++; linux_num_cpus++;
} }
} }
if(linux_num_cpus == 0) { if (linux_num_cpus == 0 && sparc_cpu_model == sun4d) {
if (sparc_cpu_model == sun4d) { scan = prom_getchild(prom_root_node);
scan = prom_getchild(prom_root_node); for (scan = prom_searchsiblings(scan, "cpu-unit"); scan;
for (scan = prom_searchsiblings(scan, "cpu-unit"); scan; scan = prom_searchsiblings(prom_getsibling(scan), "cpu-unit")) {
scan = prom_searchsiblings(prom_getsibling(scan), "cpu-unit")) { int node = prom_getchild(scan);
int node = prom_getchild(scan);
prom_getstring(node, "device_type", node_str, sizeof(node_str)); prom_getstring(node, "device_type",
if (strcmp(node_str, "cpu") == 0) { node_str, sizeof(node_str));
prom_getproperty(node, "cpu-id", (char *) &thismid, sizeof(thismid)); if (strcmp(node_str, "cpu") == 0) {
linux_cpus[linux_num_cpus].prom_node = node; prom_getproperty(node, "cpu-id",
linux_cpus[linux_num_cpus].mid = thismid; (char *) &thismid, sizeof(thismid));
/* prom_printf("Found CPU %d <node=%08lx,mid=%d>\n", linux_cpus[linux_num_cpus].prom_node = node;
linux_num_cpus, (unsigned long) node, thismid); */ linux_cpus[linux_num_cpus].mid = thismid;
printk("Found CPU %d <node=%08lx,mid=%d>\n", printk("Found CPU %d <node=%08lx,mid=%d>\n",
linux_num_cpus, (unsigned long) node, thismid); linux_num_cpus, (unsigned long) node, thismid);
linux_num_cpus++; linux_num_cpus++;
}
} }
} }
} }
if(linux_num_cpus == 0) { if (linux_num_cpus == 0) {
printk("No CPU nodes found, cannot continue.\n"); printk("No CPU nodes found, cannot continue.\n");
/* Probably a sun4e, Sun is trying to trick us ;-) */ /* Probably a sun4e, Sun is trying to trick us ;-) */
halt(); halt();
} }
printk("Found %d CPU prom device tree node(s).\n", linux_num_cpus); printk("Found %d CPU prom device tree node(s).\n", linux_num_cpus);
}; }
cpu_probe(); cpu_probe();
#ifdef CONFIG_SUN_AUXIO #ifdef CONFIG_SUN_AUXIO
...@@ -92,5 +91,5 @@ device_scan(unsigned long mem_start) ...@@ -92,5 +91,5 @@ device_scan(unsigned long mem_start)
if (ARCH_SUN4C_SUN4) if (ARCH_SUN4C_SUN4)
sun4c_probe_memerr_reg(); sun4c_probe_memerr_reg();
return mem_start; return;
} }
This diff is collapsed.
...@@ -31,11 +31,6 @@ else ...@@ -31,11 +31,6 @@ else
endif endif
endif endif
#
# This is just to get the dependencies...
#
binfmt_elf32.o: $(TOPDIR)/fs/binfmt_elf.c
ifneq ($(NEW_GCC),y) ifneq ($(NEW_GCC),y)
CMODEL_CFLAG := -mmedlow CMODEL_CFLAG := -mmedlow
else else
......
...@@ -2879,16 +2879,19 @@ do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) ...@@ -2879,16 +2879,19 @@ do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
bprm.sh_bang = 0; bprm.sh_bang = 0;
bprm.loader = 0; bprm.loader = 0;
bprm.exec = 0; bprm.exec = 0;
if ((bprm.argc = count32(argv, bprm.p / sizeof(u32))) < 0) {
allow_write_access(file); bprm.mm = mm_alloc();
fput(file); retval = -ENOMEM;
return bprm.argc; if (!bprm.mm)
} goto out_file;
if ((bprm.envc = count32(envp, bprm.p / sizeof(u32))) < 0) {
allow_write_access(file); bprm.argc = count32(argv, bprm.p / sizeof(u32));
fput(file); if ((retval = bprm.argc) < 0)
return bprm.envc; goto out_mm;
}
bprm.envc = count32(envp, bprm.p / sizeof(u32));
if ((retval = bprm.envc) < 0)
goto out_mm;
retval = prepare_binprm(&bprm); retval = prepare_binprm(&bprm);
if (retval < 0) if (retval < 0)
...@@ -2914,14 +2917,20 @@ do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) ...@@ -2914,14 +2917,20 @@ do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
out: out:
/* Something went wrong, return the inode and free the argument pages*/ /* Something went wrong, return the inode and free the argument pages*/
allow_write_access(bprm.file); for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
if (bprm.file) struct page * page = bprm.page[i];
fput(bprm.file); if (page)
__free_page(page);
}
for (i=0 ; i<MAX_ARG_PAGES ; i++) out_mm:
if (bprm.page[i]) mmdrop(bprm.mm);
__free_page(bprm.page[i]);
out_file:
if (bprm.file) {
allow_write_access(bprm.file);
fput(bprm.file);
}
return retval; return retval;
} }
......
...@@ -17,20 +17,10 @@ ...@@ -17,20 +17,10 @@
static inline void forget_pte(pte_t page) static inline void forget_pte(pte_t page)
{ {
if (pte_none(page)) if (!pte_none(page)) {
return; printk("forget_pte: old mapping existed!\n");
if (pte_present(page)) { BUG();
unsigned long pfn = pte_pfn(page);
struct page *ptpage;
if (!pfn_valid(pfn))
return;
ptpage = pfn_to_page(page);
if (PageReserved(ptpage))
return;
page_cache_release(ptpage);
return;
} }
swap_free(pte_to_swp_entry(page));
} }
/* Remap IO memory, the same way as remap_page_range(), but use /* Remap IO memory, the same way as remap_page_range(), but use
......
...@@ -16,7 +16,22 @@ extern unsigned int ___illegal_use_of_BTFIXUP_SIMM13_in_module(void); ...@@ -16,7 +16,22 @@ extern unsigned int ___illegal_use_of_BTFIXUP_SIMM13_in_module(void);
extern unsigned int ___illegal_use_of_BTFIXUP_SETHI_in_module(void); extern unsigned int ___illegal_use_of_BTFIXUP_SETHI_in_module(void);
extern unsigned int ___illegal_use_of_BTFIXUP_HALF_in_module(void); extern unsigned int ___illegal_use_of_BTFIXUP_HALF_in_module(void);
extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void); extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
#endif
#define BTFIXUP_SIMM13(__name) ___illegal_use_of_BTFIXUP_SIMM13_in_module()
#define BTFIXUP_HALF(__name) ___illegal_use_of_BTFIXUP_HALF_in_module()
#define BTFIXUP_SETHI(__name) ___illegal_use_of_BTFIXUP_SETHI_in_module()
#define BTFIXUP_INT(__name) ___illegal_use_of_BTFIXUP_INT_in_module()
#define BTFIXUP_BLACKBOX(__name) ___illegal_use_of_BTFIXUP_BLACKBOX_in_module
#else
#define BTFIXUP_SIMM13(__name) ___sf_##__name()
#define BTFIXUP_HALF(__name) ___af_##__name()
#define BTFIXUP_SETHI(__name) ___hf_##__name()
#define BTFIXUP_INT(__name) ((unsigned int)&___i_##__name)
/* This must be written in assembly and present in a sethi */
#define BTFIXUP_BLACKBOX(__name) ___b_##__name
#endif /* MODULE */
/* Fixup call xx */ /* Fixup call xx */
...@@ -30,12 +45,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void); ...@@ -30,12 +45,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
#define BTFIXUPDEF_BLACKBOX(__name) \ #define BTFIXUPDEF_BLACKBOX(__name) \
extern unsigned ___bs_##__name[2]; extern unsigned ___bs_##__name[2];
#ifdef MODULE
#define BTFIXUP_BLACKBOX(__name) ___illegal_use_of_BTFIXUP_BLACKBOX_in_module
#else
/* This must be written in assembly and present in a sethi */
#define BTFIXUP_BLACKBOX(__name) ___b_##__name
#endif
/* Put bottom 13bits into some register variable */ /* Put bottom 13bits into some register variable */
...@@ -55,11 +64,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void); ...@@ -55,11 +64,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
__asm__ ("or %%g0, ___s_" #__name "__btset_" #__val ", %0" : "=r"(ret));\ __asm__ ("or %%g0, ___s_" #__name "__btset_" #__val ", %0" : "=r"(ret));\
return ret; \ return ret; \
} }
#ifdef MODULE
#define BTFIXUP_SIMM13(__name) ___illegal_use_of_BTFIXUP_SIMM13_in_module()
#else
#define BTFIXUP_SIMM13(__name) ___sf_##__name()
#endif
/* Put either bottom 13 bits, or upper 22 bits into some register variable /* Put either bottom 13 bits, or upper 22 bits into some register variable
* (depending on the value, this will lead into sethi FIX, reg; or * (depending on the value, this will lead into sethi FIX, reg; or
...@@ -82,11 +86,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void); ...@@ -82,11 +86,6 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
__asm__ ("or %%g0, ___a_" #__name "__btset_" #__val ", %0" : "=r"(ret));\ __asm__ ("or %%g0, ___a_" #__name "__btset_" #__val ", %0" : "=r"(ret));\
return ret; \ return ret; \
} }
#ifdef MODULE
#define BTFIXUP_HALF(__name) ___illegal_use_of_BTFIXUP_HALF_in_module()
#else
#define BTFIXUP_HALF(__name) ___af_##__name()
#endif
/* Put upper 22 bits into some register variable */ /* Put upper 22 bits into some register variable */
...@@ -107,22 +106,12 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void); ...@@ -107,22 +106,12 @@ extern unsigned int ___illegal_use_of_BTFIXUP_INT_in_module(void);
"=r"(ret)); \ "=r"(ret)); \
return ret; \ return ret; \
} }
#ifdef MODULE
#define BTFIXUP_SETHI(__name) ___illegal_use_of_BTFIXUP_SETHI_in_module()
#else
#define BTFIXUP_SETHI(__name) ___hf_##__name()
#endif
/* Put a full 32bit integer into some register variable */ /* Put a full 32bit integer into some register variable */
#define BTFIXUPDEF_INT(__name) \ #define BTFIXUPDEF_INT(__name) \
extern unsigned char ___i_##__name; \ extern unsigned char ___i_##__name; \
extern unsigned ___is_##__name[2]; extern unsigned ___is_##__name[2];
#ifdef MODULE
#define BTFIXUP_INT(__name) ___illegal_use_of_BTFIXUP_INT_in_module()
#else
#define BTFIXUP_INT(__name) ((unsigned int)&___i_##__name)
#endif
#define BTFIXUPCALL_NORM 0x00000000 /* Always call */ #define BTFIXUPCALL_NORM 0x00000000 /* Always call */
#define BTFIXUPCALL_NOP 0x01000000 /* Possibly optimize to nop */ #define BTFIXUPCALL_NOP 0x01000000 /* Possibly optimize to nop */
......
...@@ -54,8 +54,8 @@ ...@@ -54,8 +54,8 @@
#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
#define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE) #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
#define clear_user_page(page, vaddr) clear_page(page) #define clear_user_page(addr, vaddr, page) clear_page(addr)
#define copy_user_page(to, from, vaddr) copy_page(to, from) #define copy_user_page(to, from, vaddr, page) copy_page(to, from)
/* The following structure is used to hold the physical /* The following structure is used to hold the physical
* memory configuration of the machine. This is filled in * memory configuration of the machine. This is filled in
......
/* $Id: ultra.h,v 1.2 1995/11/25 02:33:10 davem Exp $
* ultra.h: Definitions and defines for the TI V9 UltraSparc.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
*/
#ifndef _SPARC_ULTRA_H
#define _SPARC_ULTRA_H
/* Spitfire MMU control register:
*
* ----------------------------------------------------------
* | | IMPL | VERS | | MID | |
* ----------------------------------------------------------
* 64 31-28 27-24 23-22 21-17 16 0
*
* IMPL: Implementation of this Spitfire.
* VERS: Version of this Spitfire.
* MID: Module ID of this processor.
*/
#define SPITFIRE_MIDMASK 0x00000000003e0000
/* Spitfire Load Store Unit control register:
*
* ---------------------------------------------------------------------
* | RSV | PWR | PWW | VWR | VWW | RSV | PMASK | DME | IME | DCE | ICE |
* ---------------------------------------------------------------------
* 63-25 24 23 22 21 20 19-4 3 2 1 0
*
* PWR: Physical Watchpoint Read enable: 0=off 1=on
* PWW: Physical Watchpoint Write enable: 0=off 1=on
* VWR: Virtual Watchpoint Read enable: 0=off 1=on
* VWW: Virtual Watchpoint Write enable: 0=off 1=on
* PMASK: Parity MASK ???
* DME: Data MMU Enable: 0=off 1=on
* IME: Instruction MMU Enable: 0=off 1=on
* DCE: Data Cache Enable: 0=off 1=on
* ICE: Instruction Cache Enable: 0=off 1=on
*/
#define SPITFIRE_LSU_PWR 0x01000000
#define SPITFIRE_LSU_PWW 0x00800000
#define SPITFIRE_LSU_VWR 0x00400000
#define SPITFIRE_LSU_VWW 0x00200000
#define SPITFIRE_LSU_PMASK 0x000ffff0
#define SPITFIRE_LSU_DME 0x00000008
#define SPITFIRE_LSU_IME 0x00000004
#define SPITFIRE_LSU_DCE 0x00000002
#define SPITFIRE_LSU_ICE 0x00000001
#endif /* !(_SPARC_ULTRA_H) */
...@@ -107,8 +107,6 @@ struct sun4c_vac_props { ...@@ -107,8 +107,6 @@ struct sun4c_vac_props {
extern struct sun4c_vac_props sun4c_vacinfo; extern struct sun4c_vac_props sun4c_vacinfo;
extern void sun4c_flush_all(void);
/* sun4c_enable_vac() enables the sun4c virtual address cache. */ /* sun4c_enable_vac() enables the sun4c virtual address cache. */
extern __inline__ void sun4c_enable_vac(void) extern __inline__ void sun4c_enable_vac(void)
{ {
......
...@@ -35,8 +35,9 @@ extern void do_BUG(const char *file, int line); ...@@ -35,8 +35,9 @@ extern void do_BUG(const char *file, int line);
extern void _clear_page(void *page); extern void _clear_page(void *page);
#define clear_page(X) _clear_page((void *)(X)) #define clear_page(X) _clear_page((void *)(X))
extern void clear_user_page(void *page, unsigned long vaddr); struct page;
extern void copy_user_page(void *to, void *from, unsigned long vaddr); extern void clear_user_page(void *addr, unsigned long vaddr, struct page *page);
extern void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *topage);
/* GROSS, defining this makes gcc pass these types as aggregates, /* GROSS, defining this makes gcc pass these types as aggregates,
* and thus on the stack, turn this crap off... -DaveM * and thus on the stack, turn this crap off... -DaveM
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment