Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 279722
b: refs/heads/master
c: feb1ee7
h: refs/heads/master
v: v3
  • Loading branch information
Greg Ungerer committed Dec 30, 2011
1 parent e6c05b1 commit 353b6d1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e08d703cc2ab6e47dbd10a74eb029f7dfa93d71d
refs/heads/master: feb1ee759522eb67e7733fe5b59bd17420f4d2d8
30 changes: 16 additions & 14 deletions trunk/arch/m68k/include/asm/segment.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,26 @@ typedef struct {
} mm_segment_t;

#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
#define USER_DS MAKE_MM_SEG(__USER_DS)
#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)

#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)
{
#ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
mm_segment_t _v;
__asm__ ("movec %/dfc,%0":"=r" (_v.seg):);

return _v;
#else
return USER_DS;
#endif
}

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");
}

static inline mm_segment_t get_ds(void)
Expand All @@ -47,14 +50,13 @@ static inline mm_segment_t get_ds(void)
return KERNEL_DS;
}

static inline void set_fs(mm_segment_t val)
{
#ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
__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_ds() (KERNEL_DS)
#define get_fs() (current_thread_info()->addr_limit)
#define set_fs(x) (current_thread_info()->addr_limit = (x))
#endif
}

#define segment_eq(a,b) ((a).seg == (b).seg)

Expand Down
3 changes: 3 additions & 0 deletions trunk/arch/m68k/include/asm/thread_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include <asm/types.h>
#include <asm/page.h>
#include <asm/segment.h>

/*
* On machines with 4k pages we default to an 8k thread size, though we
Expand All @@ -26,6 +27,7 @@ struct thread_info {
struct task_struct *task; /* main task structure */
unsigned long flags;
struct exec_domain *exec_domain; /* execution domain */
mm_segment_t addr_limit; /* thread address space */
int preempt_count; /* 0 => preemptable, <0 => BUG */
__u32 cpu; /* should always be 0 on m68k */
unsigned long tp_value; /* thread pointer */
Expand All @@ -39,6 +41,7 @@ struct thread_info {
{ \
.task = &tsk, \
.exec_domain = &default_exec_domain, \
.addr_limit = KERNEL_DS, \
.preempt_count = INIT_PREEMPT_COUNT, \
.restart_block = { \
.fn = do_no_restart_syscall, \
Expand Down

0 comments on commit 353b6d1

Please sign in to comment.