aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/mm/mmap.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2008-11-11 22:53:48 -0500
committerPaul Mundt <lethal@linux-sh.org>2008-11-11 22:53:48 -0500
commit185aed75570fb4f78ef283dfa26cd9da5fa06a91 (patch)
treea98cb3f46bf9426f8d4a660d63b8a3ac7d9f369d /arch/sh/mm/mmap.c
parentade7a9b4ccd20ab8159c77a0abd20552f2d6b06c (diff)
sh: Provide a sane valid_phys_addr_range() to prevent TLB reset with PMB.
With the PMB enabled, only P1SEG and up are covered by the PMB mappings, meaning that situations where out-of-bounds physical addresses are read from will lead to TLB reset after the PMB miss, allowing for use cases like dd if=/dev/mem to reset the TLB. Fix this up to make sure the reference is between __MEMORY_START (phys) and __pa(high_memory). This is coherent across all variants of sh/sh64 with and without MMU, though the PMB bug itself is only applicable to SH-4A parts. Reported-by: Hideo Saito <saito@densan.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/mm/mmap.c')
-rw-r--r--arch/sh/mm/mmap.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c
new file mode 100644
index 000000000000..1f3cc3d92d3d
--- /dev/null
+++ b/arch/sh/mm/mmap.c
@@ -0,0 +1,31 @@
1/*
2 * arch/sh/mm/mmap.c
3 *
4 * Copyright (C) 2008 Paul Mundt
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10#include <linux/io.h>
11#include <linux/mm.h>
12#include <asm/page.h>
13
14/*
15 * You really shouldn't be using read() or write() on /dev/mem. This
16 * might go away in the future.
17 */
18int valid_phys_addr_range(unsigned long addr, size_t count)
19{
20 if (addr < (PAGE_OFFSET + (PFN_START << PAGE_SHIFT)))
21 return 0;
22 if (addr + count > __pa(high_memory))
23 return 0;
24
25 return 1;
26}
27
28int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
29{
30 return 1;
31}