mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
m68k: Remove set_fs()
Add a m68k-only set_fc helper to set the SFC and DFC registers for the few places that need to override it for special MM operations, but disconnect that from the deprecated kernel-wide set_fs() API. Note that the SFC/DFC registers are context switched, so there is no need to disable preemption. Partially based on an earlier patch from Linus Torvalds <torvalds@linux-foundation.org>. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Michael Schmitz <schmitzmic@gmail.com> Tested-by: Michael Schmitz <schmitzmic@gmail.com> Link: https://lore.kernel.org/r/20210916070405.52750-7-hch@lst.de Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
parent
8ade833909
commit
9fde034864
@ -15,7 +15,6 @@
|
|||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/entry.h>
|
#include <asm/entry.h>
|
||||||
|
@ -29,7 +29,6 @@ config M68K
|
|||||||
select NO_DMA if !MMU && !COLDFIRE
|
select NO_DMA if !MMU && !COLDFIRE
|
||||||
select OLD_SIGACTION
|
select OLD_SIGACTION
|
||||||
select OLD_SIGSUSPEND3
|
select OLD_SIGSUSPEND3
|
||||||
select SET_FS
|
|
||||||
select UACCESS_MEMCPY if !MMU
|
select UACCESS_MEMCPY if !MMU
|
||||||
select VIRT_TO_BUS
|
select VIRT_TO_BUS
|
||||||
select ZONE_DMA
|
select ZONE_DMA
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/entry.h>
|
#include <asm/entry.h>
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
#define __ASM_M68K_PROCESSOR_H
|
#define __ASM_M68K_PROCESSOR_H
|
||||||
|
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
|
||||||
@ -75,11 +74,37 @@ static inline void wrusp(unsigned long usp)
|
|||||||
#define TASK_UNMAPPED_BASE 0
|
#define TASK_UNMAPPED_BASE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Address spaces (or Function Codes in Motorola lingo) */
|
||||||
|
#define USER_DATA 1
|
||||||
|
#define USER_PROGRAM 2
|
||||||
|
#define SUPER_DATA 5
|
||||||
|
#define SUPER_PROGRAM 6
|
||||||
|
#define CPU_SPACE 7
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
|
||||||
|
/*
|
||||||
|
* Set the SFC/DFC registers for special MM operations. For most normal
|
||||||
|
* operation these remain set to USER_DATA for the uaccess routines.
|
||||||
|
*/
|
||||||
|
static inline void set_fc(unsigned long val)
|
||||||
|
{
|
||||||
|
WARN_ON_ONCE(in_interrupt());
|
||||||
|
|
||||||
|
__asm__ __volatile__ ("movec %0,%/sfc\n\t"
|
||||||
|
"movec %0,%/dfc\n\t"
|
||||||
|
: /* no outputs */ : "r" (val) : "memory");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void set_fc(unsigned long val)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_CPU_HAS_ADDRESS_SPACES */
|
||||||
|
|
||||||
struct thread_struct {
|
struct thread_struct {
|
||||||
unsigned long ksp; /* kernel stack pointer */
|
unsigned long ksp; /* kernel stack pointer */
|
||||||
unsigned long usp; /* user stack pointer */
|
unsigned long usp; /* user stack pointer */
|
||||||
unsigned short sr; /* saved status register */
|
unsigned short sr; /* saved status register */
|
||||||
unsigned short fs; /* saved fs (sfc, dfc) */
|
unsigned short fc; /* saved fc (sfc, dfc) */
|
||||||
unsigned long crp[2]; /* cpu root pointer */
|
unsigned long crp[2]; /* cpu root pointer */
|
||||||
unsigned long esp0; /* points to SR of stack frame */
|
unsigned long esp0; /* points to SR of stack frame */
|
||||||
unsigned long faddr; /* info about last fault */
|
unsigned long faddr; /* info about last fault */
|
||||||
@ -92,7 +117,7 @@ struct thread_struct {
|
|||||||
#define INIT_THREAD { \
|
#define INIT_THREAD { \
|
||||||
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
|
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
|
||||||
.sr = PS_S, \
|
.sr = PS_S, \
|
||||||
.fs = __KERNEL_DS, \
|
.fc = USER_DATA, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
|
||||||
#ifndef _M68K_SEGMENT_H
|
|
||||||
#define _M68K_SEGMENT_H
|
|
||||||
|
|
||||||
/* define constants */
|
|
||||||
/* Address spaces (FC0-FC2) */
|
|
||||||
#define USER_DATA (1)
|
|
||||||
#ifndef __USER_DS
|
|
||||||
#define __USER_DS (USER_DATA)
|
|
||||||
#endif
|
|
||||||
#define USER_PROGRAM (2)
|
|
||||||
#define SUPER_DATA (5)
|
|
||||||
#ifndef __KERNEL_DS
|
|
||||||
#define __KERNEL_DS (SUPER_DATA)
|
|
||||||
#endif
|
|
||||||
#define SUPER_PROGRAM (6)
|
|
||||||
#define CPU_SPACE (7)
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned long seg;
|
|
||||||
} mm_segment_t;
|
|
||||||
|
|
||||||
#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
|
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
|
|
||||||
/*
|
|
||||||
* Get/set the SFC/DFC registers for MOVES instructions
|
|
||||||
*/
|
|
||||||
#define USER_DS MAKE_MM_SEG(__USER_DS)
|
|
||||||
#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
|
|
||||||
|
|
||||||
static inline mm_segment_t get_fs(void)
|
|
||||||
{
|
|
||||||
mm_segment_t _v;
|
|
||||||
__asm__ ("movec %/dfc,%0":"=r" (_v.seg):);
|
|
||||||
return _v;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void set_fs(mm_segment_t val)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("movec %0,%/sfc\n\t"
|
|
||||||
"movec %0,%/dfc\n\t"
|
|
||||||
: /* no outputs */ : "r" (val.seg) : "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define USER_DS MAKE_MM_SEG(TASK_SIZE)
|
|
||||||
#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
|
|
||||||
#define get_fs() (current_thread_info()->addr_limit)
|
|
||||||
#define set_fs(x) (current_thread_info()->addr_limit = (x))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
|
||||||
|
|
||||||
#endif /* _M68K_SEGMENT_H */
|
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On machines with 4k pages we default to an 8k thread size, though we
|
* On machines with 4k pages we default to an 8k thread size, though we
|
||||||
@ -27,7 +26,6 @@
|
|||||||
struct thread_info {
|
struct thread_info {
|
||||||
struct task_struct *task; /* main task structure */
|
struct task_struct *task; /* main task structure */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
mm_segment_t addr_limit; /* thread address space */
|
|
||||||
int preempt_count; /* 0 => preemptable, <0 => BUG */
|
int preempt_count; /* 0 => preemptable, <0 => BUG */
|
||||||
__u32 cpu; /* should always be 0 on m68k */
|
__u32 cpu; /* should always be 0 on m68k */
|
||||||
unsigned long tp_value; /* thread pointer */
|
unsigned long tp_value; /* thread pointer */
|
||||||
@ -37,7 +35,6 @@ struct thread_info {
|
|||||||
#define INIT_THREAD_INFO(tsk) \
|
#define INIT_THREAD_INFO(tsk) \
|
||||||
{ \
|
{ \
|
||||||
.task = &tsk, \
|
.task = &tsk, \
|
||||||
.addr_limit = KERNEL_DS, \
|
|
||||||
.preempt_count = INIT_PREEMPT_COUNT, \
|
.preempt_count = INIT_PREEMPT_COUNT, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,13 +13,12 @@ static inline void flush_tlb_kernel_page(void *addr)
|
|||||||
if (CPU_IS_COLDFIRE) {
|
if (CPU_IS_COLDFIRE) {
|
||||||
mmu_write(MMUOR, MMUOR_CNL);
|
mmu_write(MMUOR, MMUOR_CNL);
|
||||||
} else if (CPU_IS_040_OR_060) {
|
} else if (CPU_IS_040_OR_060) {
|
||||||
mm_segment_t old_fs = get_fs();
|
set_fc(SUPER_DATA);
|
||||||
set_fs(KERNEL_DS);
|
|
||||||
__asm__ __volatile__(".chip 68040\n\t"
|
__asm__ __volatile__(".chip 68040\n\t"
|
||||||
"pflush (%0)\n\t"
|
"pflush (%0)\n\t"
|
||||||
".chip 68k"
|
".chip 68k"
|
||||||
: : "a" (addr));
|
: : "a" (addr));
|
||||||
set_fs(old_fs);
|
set_fc(USER_DATA);
|
||||||
} else if (CPU_IS_020_OR_030)
|
} else if (CPU_IS_020_OR_030)
|
||||||
__asm__ __volatile__("pflush #4,#4,(%0)" : : "a" (addr));
|
__asm__ __volatile__("pflush #4,#4,(%0)" : : "a" (addr));
|
||||||
}
|
}
|
||||||
@ -84,12 +83,8 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
|
|||||||
|
|
||||||
static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
|
static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
|
||||||
{
|
{
|
||||||
if (vma->vm_mm == current->active_mm) {
|
if (vma->vm_mm == current->active_mm)
|
||||||
mm_segment_t old_fs = force_uaccess_begin();
|
|
||||||
|
|
||||||
__flush_tlb_one(addr);
|
__flush_tlb_one(addr);
|
||||||
force_uaccess_end(old_fs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void flush_tlb_range(struct vm_area_struct *vma,
|
static inline void flush_tlb_range(struct vm_area_struct *vma,
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/extable.h>
|
#include <asm/extable.h>
|
||||||
|
|
||||||
/* We let the MMU do all checking */
|
/* We let the MMU do all checking */
|
||||||
@ -451,9 +450,6 @@ do { \
|
|||||||
goto err_label; \
|
goto err_label; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define user_addr_max() \
|
|
||||||
(uaccess_kernel() ? ~0UL : TASK_SIZE)
|
|
||||||
|
|
||||||
extern long strncpy_from_user(char *dst, const char __user *src, long count);
|
extern long strncpy_from_user(char *dst, const char __user *src, long count);
|
||||||
extern __must_check long strnlen_user(const char __user *str, long n);
|
extern __must_check long strnlen_user(const char __user *str, long n);
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ int main(void)
|
|||||||
DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp));
|
DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp));
|
||||||
DEFINE(THREAD_USP, offsetof(struct thread_struct, usp));
|
DEFINE(THREAD_USP, offsetof(struct thread_struct, usp));
|
||||||
DEFINE(THREAD_SR, offsetof(struct thread_struct, sr));
|
DEFINE(THREAD_SR, offsetof(struct thread_struct, sr));
|
||||||
DEFINE(THREAD_FS, offsetof(struct thread_struct, fs));
|
DEFINE(THREAD_FC, offsetof(struct thread_struct, fc));
|
||||||
DEFINE(THREAD_CRP, offsetof(struct thread_struct, crp));
|
DEFINE(THREAD_CRP, offsetof(struct thread_struct, crp));
|
||||||
DEFINE(THREAD_ESP0, offsetof(struct thread_struct, esp0));
|
DEFINE(THREAD_ESP0, offsetof(struct thread_struct, esp0));
|
||||||
DEFINE(THREAD_FPREG, offsetof(struct thread_struct, fp));
|
DEFINE(THREAD_FPREG, offsetof(struct thread_struct, fp));
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
@ -337,7 +336,7 @@ resume:
|
|||||||
|
|
||||||
/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
|
/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
|
||||||
movec %sfc,%d0
|
movec %sfc,%d0
|
||||||
movew %d0,%a0@(TASK_THREAD+THREAD_FS)
|
movew %d0,%a0@(TASK_THREAD+THREAD_FC)
|
||||||
|
|
||||||
/* save usp */
|
/* save usp */
|
||||||
/* it is better to use a movel here instead of a movew 8*) */
|
/* it is better to use a movel here instead of a movew 8*) */
|
||||||
@ -423,7 +422,7 @@ resume:
|
|||||||
movel %a0,%usp
|
movel %a0,%usp
|
||||||
|
|
||||||
/* restore fs (sfc,%dfc) */
|
/* restore fs (sfc,%dfc) */
|
||||||
movew %a1@(TASK_THREAD+THREAD_FS),%a0
|
movew %a1@(TASK_THREAD+THREAD_FC),%a0
|
||||||
movec %a0,%sfc
|
movec %a0,%sfc
|
||||||
movec %a0,%dfc
|
movec %a0,%dfc
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ void show_regs(struct pt_regs * regs)
|
|||||||
|
|
||||||
void flush_thread(void)
|
void flush_thread(void)
|
||||||
{
|
{
|
||||||
current->thread.fs = __USER_DS;
|
current->thread.fc = USER_DATA;
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
if (!FPU_IS_EMU) {
|
if (!FPU_IS_EMU) {
|
||||||
unsigned long zero = 0;
|
unsigned long zero = 0;
|
||||||
@ -155,7 +155,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
|
|||||||
* Must save the current SFC/DFC value, NOT the value when
|
* Must save the current SFC/DFC value, NOT the value when
|
||||||
* the parent was last descheduled - RGH 10-08-96
|
* the parent was last descheduled - RGH 10-08-96
|
||||||
*/
|
*/
|
||||||
p->thread.fs = get_fs().seg;
|
p->thread.fc = USER_DATA;
|
||||||
|
|
||||||
if (unlikely(p->flags & (PF_KTHREAD | PF_IO_WORKER))) {
|
if (unlikely(p->flags & (PF_KTHREAD | PF_IO_WORKER))) {
|
||||||
/* kernel thread */
|
/* kernel thread */
|
||||||
|
@ -181,9 +181,8 @@ static inline void access_error060 (struct frame *fp)
|
|||||||
static inline unsigned long probe040(int iswrite, unsigned long addr, int wbs)
|
static inline unsigned long probe040(int iswrite, unsigned long addr, int wbs)
|
||||||
{
|
{
|
||||||
unsigned long mmusr;
|
unsigned long mmusr;
|
||||||
mm_segment_t old_fs = get_fs();
|
|
||||||
|
|
||||||
set_fs(MAKE_MM_SEG(wbs));
|
set_fc(wbs);
|
||||||
|
|
||||||
if (iswrite)
|
if (iswrite)
|
||||||
asm volatile (".chip 68040; ptestw (%0); .chip 68k" : : "a" (addr));
|
asm volatile (".chip 68040; ptestw (%0); .chip 68k" : : "a" (addr));
|
||||||
@ -192,7 +191,7 @@ static inline unsigned long probe040(int iswrite, unsigned long addr, int wbs)
|
|||||||
|
|
||||||
asm volatile (".chip 68040; movec %%mmusr,%0; .chip 68k" : "=r" (mmusr));
|
asm volatile (".chip 68040; movec %%mmusr,%0; .chip 68k" : "=r" (mmusr));
|
||||||
|
|
||||||
set_fs(old_fs);
|
set_fc(USER_DATA);
|
||||||
|
|
||||||
return mmusr;
|
return mmusr;
|
||||||
}
|
}
|
||||||
@ -201,10 +200,8 @@ static inline int do_040writeback1(unsigned short wbs, unsigned long wba,
|
|||||||
unsigned long wbd)
|
unsigned long wbd)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
mm_segment_t old_fs = get_fs();
|
|
||||||
|
|
||||||
/* set_fs can not be moved, otherwise put_user() may oops */
|
set_fc(wbs);
|
||||||
set_fs(MAKE_MM_SEG(wbs));
|
|
||||||
|
|
||||||
switch (wbs & WBSIZ_040) {
|
switch (wbs & WBSIZ_040) {
|
||||||
case BA_SIZE_BYTE:
|
case BA_SIZE_BYTE:
|
||||||
@ -218,9 +215,7 @@ static inline int do_040writeback1(unsigned short wbs, unsigned long wba,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set_fs can not be moved, otherwise put_user() may oops */
|
set_fc(USER_DATA);
|
||||||
set_fs(old_fs);
|
|
||||||
|
|
||||||
|
|
||||||
pr_debug("do_040writeback1, res=%d\n", res);
|
pr_debug("do_040writeback1, res=%d\n", res);
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/macintosh.h>
|
#include <asm/macintosh.h>
|
||||||
#include <asm/mac_via.h>
|
#include <asm/mac_via.h>
|
||||||
|
@ -90,11 +90,9 @@ void flush_icache_user_range(unsigned long address, unsigned long endaddr)
|
|||||||
|
|
||||||
void flush_icache_range(unsigned long address, unsigned long endaddr)
|
void flush_icache_range(unsigned long address, unsigned long endaddr)
|
||||||
{
|
{
|
||||||
mm_segment_t old_fs = get_fs();
|
set_fc(SUPER_DATA);
|
||||||
|
|
||||||
set_fs(KERNEL_DS);
|
|
||||||
flush_icache_user_range(address, endaddr);
|
flush_icache_user_range(address, endaddr);
|
||||||
set_fs(old_fs);
|
set_fc(USER_DATA);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_icache_range);
|
EXPORT_SYMBOL(flush_icache_range);
|
||||||
|
|
||||||
|
@ -72,12 +72,6 @@ void __init paging_init(void)
|
|||||||
if (!empty_zero_page)
|
if (!empty_zero_page)
|
||||||
panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
|
panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
|
||||||
__func__, PAGE_SIZE, PAGE_SIZE);
|
__func__, PAGE_SIZE, PAGE_SIZE);
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up SFC/DFC registers (user data space).
|
|
||||||
*/
|
|
||||||
set_fs (USER_DS);
|
|
||||||
|
|
||||||
max_zone_pfn[ZONE_DMA] = end_mem >> PAGE_SHIFT;
|
max_zone_pfn[ZONE_DMA] = end_mem >> PAGE_SHIFT;
|
||||||
free_area_init(max_zone_pfn);
|
free_area_init(max_zone_pfn);
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
|
@ -467,7 +467,7 @@ void __init paging_init(void)
|
|||||||
/*
|
/*
|
||||||
* Set up SFC/DFC registers
|
* Set up SFC/DFC registers
|
||||||
*/
|
*/
|
||||||
set_fs(KERNEL_DS);
|
set_fc(USER_DATA);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printk ("before free_area_init\n");
|
printk ("before free_area_init\n");
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include <asm/intersil.h>
|
#include <asm/intersil.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/sun3ints.h>
|
#include <asm/sun3ints.h>
|
||||||
|
|
||||||
char sun3_reserved_pmeg[SUN3_PMEGS_NUM];
|
char sun3_reserved_pmeg[SUN3_PMEGS_NUM];
|
||||||
@ -89,7 +88,7 @@ void __init sun3_init(void)
|
|||||||
sun3_reserved_pmeg[249] = 1;
|
sun3_reserved_pmeg[249] = 1;
|
||||||
sun3_reserved_pmeg[252] = 1;
|
sun3_reserved_pmeg[252] = 1;
|
||||||
sun3_reserved_pmeg[253] = 1;
|
sun3_reserved_pmeg[253] = 1;
|
||||||
set_fs(KERNEL_DS);
|
set_fc(USER_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Without this, Bad Things happen when something calls arch_reset. */
|
/* Without this, Bad Things happen when something calls arch_reset. */
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/sun3mmu.h>
|
#include <asm/sun3mmu.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/oplib.h>
|
#include <asm/oplib.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/dvma.h>
|
#include <asm/dvma.h>
|
||||||
@ -191,14 +190,13 @@ void __init mmu_emu_init(unsigned long bootmem_end)
|
|||||||
for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE)
|
for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE)
|
||||||
sun3_put_segmap(seg, SUN3_INVALID_PMEG);
|
sun3_put_segmap(seg, SUN3_INVALID_PMEG);
|
||||||
|
|
||||||
set_fs(MAKE_MM_SEG(3));
|
set_fc(3);
|
||||||
for(seg = 0; seg < 0x10000000; seg += SUN3_PMEG_SIZE) {
|
for(seg = 0; seg < 0x10000000; seg += SUN3_PMEG_SIZE) {
|
||||||
i = sun3_get_segmap(seg);
|
i = sun3_get_segmap(seg);
|
||||||
for(j = 1; j < CONTEXTS_NUM; j++)
|
for(j = 1; j < CONTEXTS_NUM; j++)
|
||||||
(*(romvec->pv_setctxt))(j, (void *)seg, i);
|
(*(romvec->pv_setctxt))(j, (void *)seg, i);
|
||||||
}
|
}
|
||||||
set_fs(KERNEL_DS);
|
set_fc(USER_DATA);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* erase the mappings for a dead context. Uses the pg_dir for hints
|
/* erase the mappings for a dead context. Uses the pg_dir for hints
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/intersil.h>
|
#include <asm/intersil.h>
|
||||||
#include <asm/oplib.h>
|
#include <asm/oplib.h>
|
||||||
#include <asm/sun3ints.h>
|
#include <asm/sun3ints.h>
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/sun3xprom.h>
|
#include <asm/sun3xprom.h>
|
||||||
#include <asm/idprom.h>
|
#include <asm/idprom.h>
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/sun3ints.h>
|
#include <asm/sun3ints.h>
|
||||||
#include <asm/openprom.h>
|
#include <asm/openprom.h>
|
||||||
#include <asm/machines.h>
|
#include <asm/machines.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user