浏览代码

sh: Add a command line option for disabling I/O trapping.

This adds a 'noiotrap' kernel command line option to permit disabling of
I/O trapping. This is mostly useful for running on emulators where the
physical device limitations are not an issue.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt 16 年之前
父节点
当前提交
eeee7853c4
共有 2 个文件被更改,包括 15 次插入0 次删除
  1. 2 0
      Documentation/kernel-parameters.txt
  2. 13 0
      arch/sh/kernel/io_trapped.c

+ 2 - 0
Documentation/kernel-parameters.txt

@@ -1544,6 +1544,8 @@ and is between 256 and 4096 characters. It is defined in the file
 			Valid arguments: on, off
 			Valid arguments: on, off
 			Default: on
 			Default: on
 
 
+	noiotrap	[SH] Disables trapped I/O port accesses.
+
 	noirqdebug	[X86-32] Disables the code which attempts to detect and
 	noirqdebug	[X86-32] Disables the code which attempts to detect and
 			disable unhandled interrupt sources.
 			disable unhandled interrupt sources.
 
 

+ 13 - 0
arch/sh/kernel/io_trapped.c

@@ -14,6 +14,7 @@
 #include <linux/bitops.h>
 #include <linux/bitops.h>
 #include <linux/vmalloc.h>
 #include <linux/vmalloc.h>
 #include <linux/module.h>
 #include <linux/module.h>
+#include <linux/init.h>
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/mmu_context.h>
 #include <asm/mmu_context.h>
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>
@@ -32,6 +33,15 @@ EXPORT_SYMBOL_GPL(trapped_mem);
 #endif
 #endif
 static DEFINE_SPINLOCK(trapped_lock);
 static DEFINE_SPINLOCK(trapped_lock);
 
 
+static int trapped_io_disable __read_mostly;
+
+static int __init trapped_io_setup(char *__unused)
+{
+	trapped_io_disable = 1;
+	return 1;
+}
+__setup("noiotrap", trapped_io_setup);
+
 int register_trapped_io(struct trapped_io *tiop)
 int register_trapped_io(struct trapped_io *tiop)
 {
 {
 	struct resource *res;
 	struct resource *res;
@@ -39,6 +49,9 @@ int register_trapped_io(struct trapped_io *tiop)
 	struct page *pages[TRAPPED_PAGES_MAX];
 	struct page *pages[TRAPPED_PAGES_MAX];
 	int k, n;
 	int k, n;
 
 
+	if (unlikely(trapped_io_disable))
+		return 0;
+
 	/* structure must be page aligned */
 	/* structure must be page aligned */
 	if ((unsigned long)tiop & (PAGE_SIZE - 1))
 	if ((unsigned long)tiop & (PAGE_SIZE - 1))
 		goto bad;
 		goto bad;