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:
David Howells 2010-04-06 14:35:09 -07:00 committed by Linus Torvalds
parent ea56f411ec
commit 08dc179b9b
2 changed files with 3 additions and 5 deletions

View File

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

View File

@ -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
*/ */