|
@@ -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)
|
|
@@ -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)
|
|
|
|