frv: fix kernel/user segment handling in NOMMU mode
In NOMMU mode, the FRV segment handling is broken because KERNEL_DS == USER_DS. This causes tests of the following sort: /* don't pin down non-user-based iovecs */ if (segment_eq(get_fs(), KERNEL_DS)) return NULL; to malfunction. To fix this, make USER_DS the top of RAM instead of the top of the non-IO address space, and make KERNEL_DS one more than the top of the non-IO address space. Also get rid of FRV's __addr_ok() as nothing uses it. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ea56f411ec
commit
08dc179b9b
|
@ -21,12 +21,12 @@ typedef struct {
|
||||||
|
|
||||||
#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
|
#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
|
||||||
|
|
||||||
#define KERNEL_DS MAKE_MM_SEG(0xdfffffffUL)
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
#define USER_DS MAKE_MM_SEG(TASK_SIZE - 1)
|
#define USER_DS MAKE_MM_SEG(TASK_SIZE - 1)
|
||||||
|
#define KERNEL_DS MAKE_MM_SEG(0xdfffffffUL)
|
||||||
#else
|
#else
|
||||||
#define USER_DS KERNEL_DS
|
#define USER_DS MAKE_MM_SEG(memory_end)
|
||||||
|
#define KERNEL_DS MAKE_MM_SEG(0xe0000000UL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define get_ds() (KERNEL_DS)
|
#define get_ds() (KERNEL_DS)
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
#define VERIFY_READ 0
|
#define VERIFY_READ 0
|
||||||
#define VERIFY_WRITE 1
|
#define VERIFY_WRITE 1
|
||||||
|
|
||||||
#define __addr_ok(addr) ((unsigned long)(addr) < get_addr_limit())
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check that a range of addresses falls within the current address limit
|
* check that a range of addresses falls within the current address limit
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue