Commit ffc06ab0 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/sparc-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 612e744c 7d1a0d87
...@@ -153,6 +153,7 @@ void do_hw_interrupt(unsigned long type, unsigned long psr, unsigned long pc) ...@@ -153,6 +153,7 @@ void do_hw_interrupt(unsigned long type, unsigned long psr, unsigned long pc)
void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned long npc, void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned long npc,
unsigned long psr) unsigned long psr)
{ {
extern int do_user_muldiv (struct pt_regs *, unsigned long);
siginfo_t info; siginfo_t info;
if(psr & PSR_PS) if(psr & PSR_PS)
...@@ -161,11 +162,9 @@ void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned lon ...@@ -161,11 +162,9 @@ void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned lon
printk("Ill instr. at pc=%08lx instruction is %08lx\n", printk("Ill instr. at pc=%08lx instruction is %08lx\n",
regs->pc, *(unsigned long *)regs->pc); regs->pc, *(unsigned long *)regs->pc);
#endif #endif
if (sparc_cpu_model == sun4c || sparc_cpu_model == sun4) { if (!do_user_muldiv (regs, pc))
extern int do_user_muldiv (struct pt_regs *, unsigned long); return;
if (!do_user_muldiv (regs, pc))
return;
}
info.si_signo = SIGILL; info.si_signo = SIGILL;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
......
...@@ -108,7 +108,7 @@ ctxd_t *srmmu_ctx_table_phys; ...@@ -108,7 +108,7 @@ ctxd_t *srmmu_ctx_table_phys;
ctxd_t *srmmu_context_table; ctxd_t *srmmu_context_table;
int viking_mxcc_present; int viking_mxcc_present;
spinlock_t srmmu_context_spinlock = SPIN_LOCK_UNLOCKED; static spinlock_t srmmu_context_spinlock = SPIN_LOCK_UNLOCKED;
int is_hypersparc; int is_hypersparc;
...@@ -152,7 +152,7 @@ void *srmmu_nocache_pool; ...@@ -152,7 +152,7 @@ void *srmmu_nocache_pool;
void *srmmu_nocache_bitmap; void *srmmu_nocache_bitmap;
int srmmu_nocache_low; int srmmu_nocache_low;
int srmmu_nocache_used; int srmmu_nocache_used;
spinlock_t srmmu_nocache_spinlock; static spinlock_t srmmu_nocache_spinlock = SPIN_LOCK_UNLOCKED;
/* This makes sense. Honest it does - Anton */ /* This makes sense. Honest it does - Anton */
#define __nocache_pa(VADDR) (((unsigned long)VADDR) - SRMMU_NOCACHE_VADDR + __pa((unsigned long)srmmu_nocache_pool)) #define __nocache_pa(VADDR) (((unsigned long)VADDR) - SRMMU_NOCACHE_VADDR + __pa((unsigned long)srmmu_nocache_pool))
...@@ -2199,8 +2199,6 @@ void __init ld_mmu_srmmu(void) ...@@ -2199,8 +2199,6 @@ void __init ld_mmu_srmmu(void)
page_kernel = pgprot_val(SRMMU_PAGE_KERNEL); page_kernel = pgprot_val(SRMMU_PAGE_KERNEL);
pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF; pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF;
BTFIXUPSET_SIMM13(pte_file_max_bits, SRMMU_PTE_FILE_MAX_BITS);
/* Functions */ /* Functions */
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2); BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2);
......
...@@ -1808,7 +1808,7 @@ static pte_t sun4c_pgoff_to_pte(unsigned long pgoff) ...@@ -1808,7 +1808,7 @@ static pte_t sun4c_pgoff_to_pte(unsigned long pgoff)
static unsigned long sun4c_pte_to_pgoff(pte_t pte) static unsigned long sun4c_pte_to_pgoff(pte_t pte)
{ {
return pte_val(pte) & ((1UL << SUN4C_PTE_FILE_MAX_BITS) - 1); return pte_val(pte) & ((1UL << PTE_FILE_MAX_BITS) - 1);
} }
...@@ -2127,8 +2127,6 @@ void __init ld_mmu_sun4c(void) ...@@ -2127,8 +2127,6 @@ void __init ld_mmu_sun4c(void)
pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE | pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE |
_SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE; _SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE;
BTFIXUPSET_SIMM13(pte_file_max_bits, SUN4C_PTE_FILE_MAX_BITS);
/* Functions */ /* Functions */
BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM);
......
...@@ -361,6 +361,7 @@ CONFIG_INET_ECN=y ...@@ -361,6 +361,7 @@ CONFIG_INET_ECN=y
# CONFIG_SYN_COOKIES is not set # CONFIG_SYN_COOKIES is not set
CONFIG_INET_AH=y CONFIG_INET_AH=y
CONFIG_INET_ESP=y CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
CONFIG_IPV6=m CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y CONFIG_IPV6_PRIVACY=y
CONFIG_INET6_AH=m CONFIG_INET6_AH=m
......
...@@ -291,15 +291,15 @@ static inline int solaris_sockmod(unsigned int fd, unsigned int cmd, u32 arg) ...@@ -291,15 +291,15 @@ static inline int solaris_sockmod(unsigned int fd, unsigned int cmd, u32 arg)
{ {
struct inode *ino; struct inode *ino;
/* I wonder which of these tests are superfluous... --patrik */ /* I wonder which of these tests are superfluous... --patrik */
read_lock(&current->files->file_lock); spin_lock(&current->files->file_lock);
if (! current->files->fd[fd] || if (! current->files->fd[fd] ||
! current->files->fd[fd]->f_dentry || ! current->files->fd[fd]->f_dentry ||
! (ino = current->files->fd[fd]->f_dentry->d_inode) || ! (ino = current->files->fd[fd]->f_dentry->d_inode) ||
! ino->i_sock) { ! ino->i_sock) {
read_unlock(&current->files->file_lock); spin_unlock(&current->files->file_lock);
return TBADF; return TBADF;
} }
read_unlock(&current->files->file_lock); spin_unlock(&current->files->file_lock);
switch (cmd & 0xff) { switch (cmd & 0xff) {
case 109: /* SI_SOCKPARAMS */ case 109: /* SI_SOCKPARAMS */
......
...@@ -263,6 +263,8 @@ extern __inline__ int pte_file(pte_t pte) ...@@ -263,6 +263,8 @@ extern __inline__ int pte_file(pte_t pte)
return pte_val(pte) & BTFIXUP_HALF(pte_filei); return pte_val(pte) & BTFIXUP_HALF(pte_filei);
} }
/*
*/
BTFIXUPDEF_HALF(pte_wrprotecti) BTFIXUPDEF_HALF(pte_wrprotecti)
BTFIXUPDEF_HALF(pte_mkcleani) BTFIXUPDEF_HALF(pte_mkcleani)
BTFIXUPDEF_HALF(pte_mkoldi) BTFIXUPDEF_HALF(pte_mkoldi)
...@@ -387,11 +389,15 @@ extern int invalid_segment; ...@@ -387,11 +389,15 @@ extern int invalid_segment;
/* file-offset-in-pte helpers */ /* file-offset-in-pte helpers */
BTFIXUPDEF_CALL(unsigned long, pte_to_pgoff, pte_t pte); BTFIXUPDEF_CALL(unsigned long, pte_to_pgoff, pte_t pte);
BTFIXUPDEF_CALL(pte_t, pgoff_to_pte, unsigned long pgoff); BTFIXUPDEF_CALL(pte_t, pgoff_to_pte, unsigned long pgoff);
BTFIXUPDEF_SIMM13(pte_file_max_bits);
#define pte_to_pgoff(pte) BTFIXUP_CALL(pte_to_pgoff)(pte) #define pte_to_pgoff(pte) BTFIXUP_CALL(pte_to_pgoff)(pte)
#define pgoff_to_pte(off) BTFIXUP_CALL(pgoff_to_pte)(off) #define pgoff_to_pte(off) BTFIXUP_CALL(pgoff_to_pte)(off)
#define PTE_FILE_MAX_BITS BTFIXUP_SIMM13(pte_file_max_bits)
/*
* This is made a constant because mm/fremap.c required a constant.
* Note that layout of these bits is different between sun4c.c and srmmu.c.
*/
#define PTE_FILE_MAX_BITS 24
/* /*
*/ */
......
...@@ -64,8 +64,7 @@ ...@@ -64,8 +64,7 @@
#define SRMMU_FILE 0x40 /* Implemented in software */ #define SRMMU_FILE 0x40 /* Implemented in software */
#define SRMMU_PTE_FILE_MAX_BITS 24 #define SRMMU_PTE_FILE_SHIFT 8 /* == 32-PTE_FILE_MAX_BITS */
#define SRMMU_PTE_FILE_SHIFT 8
#define SRMMU_CHG_MASK (0xffffff00 | SRMMU_REF | SRMMU_DIRTY) #define SRMMU_CHG_MASK (0xffffff00 | SRMMU_REF | SRMMU_DIRTY)
......
...@@ -74,12 +74,6 @@ ...@@ -74,12 +74,6 @@
#define SUN4C_PAGE_KERNEL __pgprot(_SUN4C_READABLE|_SUN4C_WRITEABLE|\ #define SUN4C_PAGE_KERNEL __pgprot(_SUN4C_READABLE|_SUN4C_WRITEABLE|\
_SUN4C_PAGE_DIRTY|_SUN4C_PAGE_PRIV) _SUN4C_PAGE_DIRTY|_SUN4C_PAGE_PRIV)
/*
* We have a couple of free bits left, but it's probably not a big
* deal, considering sizes of RAM and swap on sun4c.
*/
#define SUN4C_PTE_FILE_MAX_BITS 20
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
extern __inline__ unsigned long sun4c_get_synchronous_error(void) extern __inline__ unsigned long sun4c_get_synchronous_error(void)
......
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