diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-27 21:29:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-27 21:29:53 -0400 |
commit | fa453a625de5b8ee9ada0a5b329df3f88751c615 (patch) | |
tree | 7a9e04d4a44bb929e96bd9bebb7b97cb733d1ecb | |
parent | 30eebb54b13ef198a3f1a143ee9dd68f295c60de (diff) | |
parent | 3463ff4439661d8107ac024329b5fe01d6e5117b (diff) |
Merge branch 'for-linus-3.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml
Pull UML changes from Richard Weinberger:
"Mostly bug fixes and cleanups"
* 'for-linus-3.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml: (35 commits)
um: Update defconfig
um: Switch to large mcmodel on x86_64
MTD: Relax dependencies
um: Wire CONFIG_GENERIC_IO up
um: Serve io_remap_pfn_range()
Introduce CONFIG_GENERIC_IO
um: allow SUBARCH=x86
um: most of the SUBARCH uses can be killed
um: deadlock in line_write_interrupt()
um: don't bother trying to rebuild CHECKFLAGS for USER_OBJS
um: use the right ifdef around exports in user_syms.c
um: a bunch of headers can be killed by using generic-y
um: ptrace-generic.h doesn't need user.h
um: kill HOST_TASK_PID
um: remove pointless include of asm/fixmap.h from asm/pgtable.h
um: asm-offsets.h might as well come from underlying arch...
um: merge processor_{32,64}.h a bit...
um: switch close_chan() to struct line
um: race fix: initialize delayed_work *before* registering IRQ
um: line->have_irq is never checked...
...
54 files changed, 813 insertions, 733 deletions
diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index b37ae706af3e..20a49ba93cb9 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common | |||
@@ -9,6 +9,7 @@ config UML | |||
9 | select HAVE_GENERIC_HARDIRQS | 9 | select HAVE_GENERIC_HARDIRQS |
10 | select GENERIC_IRQ_SHOW | 10 | select GENERIC_IRQ_SHOW |
11 | select GENERIC_CPU_DEVICES | 11 | select GENERIC_CPU_DEVICES |
12 | select GENERIC_IO | ||
12 | 13 | ||
13 | config MMU | 14 | config MMU |
14 | bool | 15 | bool |
diff --git a/arch/um/Makefile b/arch/um/Makefile index 28688e6d96d7..55c0661e2b5d 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
@@ -28,6 +28,7 @@ ifeq ($(SUBARCH),i386) | |||
28 | endif | 28 | endif |
29 | ifeq ($(SUBARCH),x86_64) | 29 | ifeq ($(SUBARCH),x86_64) |
30 | HEADER_ARCH := x86 | 30 | HEADER_ARCH := x86 |
31 | KBUILD_CFLAGS += -mcmodel=large | ||
31 | endif | 32 | endif |
32 | 33 | ||
33 | HOST_DIR := arch/$(HEADER_ARCH) | 34 | HOST_DIR := arch/$(HEADER_ARCH) |
@@ -50,7 +51,7 @@ KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/um | |||
50 | # | 51 | # |
51 | # These apply to USER_CFLAGS to. | 52 | # These apply to USER_CFLAGS to. |
52 | 53 | ||
53 | KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ | 54 | KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \ |
54 | $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ | 55 | $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ |
55 | -Din6addr_loopback=kernel_in6addr_loopback \ | 56 | -Din6addr_loopback=kernel_in6addr_loopback \ |
56 | -Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr | 57 | -Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr |
@@ -99,7 +100,7 @@ KBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig | |||
99 | 100 | ||
100 | archheaders: | 101 | archheaders: |
101 | $(Q)$(MAKE) -C '$(srctree)' KBUILD_SRC= \ | 102 | $(Q)$(MAKE) -C '$(srctree)' KBUILD_SRC= \ |
102 | ARCH=$(SUBARCH) O='$(objtree)' archheaders | 103 | ARCH=$(HEADER_ARCH) O='$(objtree)' archheaders |
103 | 104 | ||
104 | archprepare: include/generated/user_constants.h | 105 | archprepare: include/generated/user_constants.h |
105 | 106 | ||
diff --git a/arch/um/defconfig b/arch/um/defconfig index 761f5e1a657e..fdc97e2c3d73 100644 --- a/arch/um/defconfig +++ b/arch/um/defconfig | |||
@@ -1,10 +1,8 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated file; DO NOT EDIT. |
3 | # Linux kernel version: 2.6.24 | 3 | # User Mode Linux/i386 3.3.0 Kernel Configuration |
4 | # Thu Feb 7 11:48:55 2008 | ||
5 | # | 4 | # |
6 | CONFIG_DEFCONFIG_LIST="arch/$ARCH/defconfig" | 5 | CONFIG_DEFCONFIG_LIST="arch/$ARCH/defconfig" |
7 | CONFIG_GENERIC_HARDIRQS=y | ||
8 | CONFIG_UML=y | 6 | CONFIG_UML=y |
9 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
10 | CONFIG_NO_IOMEM=y | 8 | CONFIG_NO_IOMEM=y |
@@ -20,12 +18,10 @@ CONFIG_HZ=100 | |||
20 | # | 18 | # |
21 | # UML-specific options | 19 | # UML-specific options |
22 | # | 20 | # |
23 | # CONFIG_STATIC_LINK is not set | ||
24 | 21 | ||
25 | # | 22 | # |
26 | # Host processor type and features | 23 | # Host processor type and features |
27 | # | 24 | # |
28 | # CONFIG_M386 is not set | ||
29 | # CONFIG_M486 is not set | 25 | # CONFIG_M486 is not set |
30 | # CONFIG_M586 is not set | 26 | # CONFIG_M586 is not set |
31 | # CONFIG_M586TSC is not set | 27 | # CONFIG_M586TSC is not set |
@@ -41,17 +37,17 @@ CONFIG_M686=y | |||
41 | # CONFIG_MCRUSOE is not set | 37 | # CONFIG_MCRUSOE is not set |
42 | # CONFIG_MEFFICEON is not set | 38 | # CONFIG_MEFFICEON is not set |
43 | # CONFIG_MWINCHIPC6 is not set | 39 | # CONFIG_MWINCHIPC6 is not set |
44 | # CONFIG_MWINCHIP2 is not set | ||
45 | # CONFIG_MWINCHIP3D is not set | 40 | # CONFIG_MWINCHIP3D is not set |
41 | # CONFIG_MELAN is not set | ||
46 | # CONFIG_MGEODEGX1 is not set | 42 | # CONFIG_MGEODEGX1 is not set |
47 | # CONFIG_MGEODE_LX is not set | 43 | # CONFIG_MGEODE_LX is not set |
48 | # CONFIG_MCYRIXIII is not set | 44 | # CONFIG_MCYRIXIII is not set |
49 | # CONFIG_MVIAC3_2 is not set | 45 | # CONFIG_MVIAC3_2 is not set |
50 | # CONFIG_MVIAC7 is not set | 46 | # CONFIG_MVIAC7 is not set |
51 | # CONFIG_MPSC is not set | ||
52 | # CONFIG_MCORE2 is not set | 47 | # CONFIG_MCORE2 is not set |
53 | # CONFIG_GENERIC_CPU is not set | 48 | # CONFIG_MATOM is not set |
54 | # CONFIG_X86_GENERIC is not set | 49 | # CONFIG_X86_GENERIC is not set |
50 | CONFIG_X86_INTERNODE_CACHE_SHIFT=5 | ||
55 | CONFIG_X86_CMPXCHG=y | 51 | CONFIG_X86_CMPXCHG=y |
56 | CONFIG_X86_L1_CACHE_SHIFT=5 | 52 | CONFIG_X86_L1_CACHE_SHIFT=5 |
57 | CONFIG_X86_XADD=y | 53 | CONFIG_X86_XADD=y |
@@ -60,47 +56,59 @@ CONFIG_X86_WP_WORKS_OK=y | |||
60 | CONFIG_X86_INVLPG=y | 56 | CONFIG_X86_INVLPG=y |
61 | CONFIG_X86_BSWAP=y | 57 | CONFIG_X86_BSWAP=y |
62 | CONFIG_X86_POPAD_OK=y | 58 | CONFIG_X86_POPAD_OK=y |
63 | CONFIG_X86_GOOD_APIC=y | ||
64 | CONFIG_X86_USE_PPRO_CHECKSUM=y | 59 | CONFIG_X86_USE_PPRO_CHECKSUM=y |
65 | CONFIG_X86_TSC=y | 60 | CONFIG_X86_TSC=y |
61 | CONFIG_X86_CMPXCHG64=y | ||
66 | CONFIG_X86_CMOV=y | 62 | CONFIG_X86_CMOV=y |
67 | CONFIG_X86_MINIMUM_CPU_FAMILY=4 | 63 | CONFIG_X86_MINIMUM_CPU_FAMILY=5 |
68 | CONFIG_X86_DEBUGCTLMSR=y | 64 | CONFIG_CPU_SUP_INTEL=y |
65 | CONFIG_CPU_SUP_CYRIX_32=y | ||
66 | CONFIG_CPU_SUP_AMD=y | ||
67 | CONFIG_CPU_SUP_CENTAUR=y | ||
68 | CONFIG_CPU_SUP_TRANSMETA_32=y | ||
69 | CONFIG_CPU_SUP_UMC_32=y | ||
69 | CONFIG_UML_X86=y | 70 | CONFIG_UML_X86=y |
70 | CONFIG_X86_32=y | ||
71 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
72 | # CONFIG_64BIT is not set | 71 | # CONFIG_64BIT is not set |
73 | CONFIG_SEMAPHORE_SLEEPERS=y | 72 | CONFIG_X86_32=y |
73 | # CONFIG_X86_64 is not set | ||
74 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | ||
75 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
74 | # CONFIG_3_LEVEL_PGTABLES is not set | 76 | # CONFIG_3_LEVEL_PGTABLES is not set |
75 | CONFIG_ARCH_HAS_SC_SIGNALS=y | 77 | CONFIG_ARCH_HAS_SC_SIGNALS=y |
76 | CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y | 78 | CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y |
77 | CONFIG_GENERIC_HWEIGHT=y | 79 | CONFIG_GENERIC_HWEIGHT=y |
80 | # CONFIG_STATIC_LINK is not set | ||
78 | CONFIG_SELECT_MEMORY_MODEL=y | 81 | CONFIG_SELECT_MEMORY_MODEL=y |
79 | CONFIG_FLATMEM_MANUAL=y | 82 | CONFIG_FLATMEM_MANUAL=y |
80 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
81 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
82 | CONFIG_FLATMEM=y | 83 | CONFIG_FLATMEM=y |
83 | CONFIG_FLAT_NODE_MEM_MAP=y | 84 | CONFIG_FLAT_NODE_MEM_MAP=y |
84 | # CONFIG_SPARSEMEM_STATIC is not set | 85 | CONFIG_PAGEFLAGS_EXTENDED=y |
85 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
86 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 86 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
87 | # CONFIG_RESOURCES_64BIT is not set | 87 | # CONFIG_COMPACTION is not set |
88 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
88 | CONFIG_ZONE_DMA_FLAG=0 | 89 | CONFIG_ZONE_DMA_FLAG=0 |
89 | CONFIG_VIRT_TO_BUS=y | 90 | CONFIG_VIRT_TO_BUS=y |
91 | # CONFIG_KSM is not set | ||
92 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
93 | CONFIG_NEED_PER_CPU_KM=y | ||
94 | # CONFIG_CLEANCACHE is not set | ||
90 | CONFIG_TICK_ONESHOT=y | 95 | CONFIG_TICK_ONESHOT=y |
91 | CONFIG_NO_HZ=y | 96 | CONFIG_NO_HZ=y |
92 | CONFIG_HIGH_RES_TIMERS=y | 97 | CONFIG_HIGH_RES_TIMERS=y |
93 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | 98 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y |
94 | CONFIG_LD_SCRIPT_DYN=y | 99 | CONFIG_LD_SCRIPT_DYN=y |
95 | CONFIG_BINFMT_ELF=y | 100 | CONFIG_BINFMT_ELF=y |
101 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y | ||
102 | CONFIG_HAVE_AOUT=y | ||
96 | # CONFIG_BINFMT_AOUT is not set | 103 | # CONFIG_BINFMT_AOUT is not set |
97 | CONFIG_BINFMT_MISC=m | 104 | CONFIG_BINFMT_MISC=m |
98 | CONFIG_HOSTFS=y | 105 | CONFIG_HOSTFS=y |
99 | # CONFIG_HPPFS is not set | 106 | # CONFIG_HPPFS is not set |
100 | CONFIG_MCONSOLE=y | 107 | CONFIG_MCONSOLE=y |
101 | CONFIG_MAGIC_SYSRQ=y | 108 | CONFIG_MAGIC_SYSRQ=y |
102 | # CONFIG_HIGHMEM is not set | ||
103 | CONFIG_KERNEL_STACK_ORDER=0 | 109 | CONFIG_KERNEL_STACK_ORDER=0 |
110 | # CONFIG_MMAPPER is not set | ||
111 | CONFIG_NO_DMA=y | ||
104 | 112 | ||
105 | # | 113 | # |
106 | # General setup | 114 | # General setup |
@@ -108,99 +116,169 @@ CONFIG_KERNEL_STACK_ORDER=0 | |||
108 | CONFIG_EXPERIMENTAL=y | 116 | CONFIG_EXPERIMENTAL=y |
109 | CONFIG_BROKEN_ON_SMP=y | 117 | CONFIG_BROKEN_ON_SMP=y |
110 | CONFIG_INIT_ENV_ARG_LIMIT=128 | 118 | CONFIG_INIT_ENV_ARG_LIMIT=128 |
119 | CONFIG_CROSS_COMPILE="" | ||
111 | CONFIG_LOCALVERSION="" | 120 | CONFIG_LOCALVERSION="" |
112 | CONFIG_LOCALVERSION_AUTO=y | 121 | CONFIG_LOCALVERSION_AUTO=y |
122 | CONFIG_DEFAULT_HOSTNAME="(none)" | ||
113 | CONFIG_SWAP=y | 123 | CONFIG_SWAP=y |
114 | CONFIG_SYSVIPC=y | 124 | CONFIG_SYSVIPC=y |
115 | CONFIG_SYSVIPC_SYSCTL=y | 125 | CONFIG_SYSVIPC_SYSCTL=y |
116 | CONFIG_POSIX_MQUEUE=y | 126 | CONFIG_POSIX_MQUEUE=y |
127 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
117 | CONFIG_BSD_PROCESS_ACCT=y | 128 | CONFIG_BSD_PROCESS_ACCT=y |
118 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | 129 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set |
130 | # CONFIG_FHANDLE is not set | ||
119 | # CONFIG_TASKSTATS is not set | 131 | # CONFIG_TASKSTATS is not set |
120 | # CONFIG_USER_NS is not set | ||
121 | # CONFIG_PID_NS is not set | ||
122 | # CONFIG_AUDIT is not set | 132 | # CONFIG_AUDIT is not set |
133 | CONFIG_HAVE_GENERIC_HARDIRQS=y | ||
134 | |||
135 | # | ||
136 | # IRQ subsystem | ||
137 | # | ||
138 | CONFIG_GENERIC_HARDIRQS=y | ||
139 | CONFIG_GENERIC_IRQ_SHOW=y | ||
140 | |||
141 | # | ||
142 | # RCU Subsystem | ||
143 | # | ||
144 | CONFIG_TINY_RCU=y | ||
145 | # CONFIG_PREEMPT_RCU is not set | ||
146 | # CONFIG_RCU_TRACE is not set | ||
147 | # CONFIG_TREE_RCU_TRACE is not set | ||
123 | CONFIG_IKCONFIG=y | 148 | CONFIG_IKCONFIG=y |
124 | CONFIG_IKCONFIG_PROC=y | 149 | CONFIG_IKCONFIG_PROC=y |
125 | CONFIG_LOG_BUF_SHIFT=14 | 150 | CONFIG_LOG_BUF_SHIFT=14 |
126 | # CONFIG_CGROUPS is not set | 151 | CONFIG_CGROUPS=y |
152 | # CONFIG_CGROUP_DEBUG is not set | ||
153 | CONFIG_CGROUP_FREEZER=y | ||
154 | CONFIG_CGROUP_DEVICE=y | ||
155 | CONFIG_CPUSETS=y | ||
156 | CONFIG_PROC_PID_CPUSET=y | ||
157 | CONFIG_CGROUP_CPUACCT=y | ||
158 | CONFIG_RESOURCE_COUNTERS=y | ||
159 | CONFIG_CGROUP_MEM_RES_CTLR=y | ||
160 | CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y | ||
161 | # CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is not set | ||
162 | # CONFIG_CGROUP_MEM_RES_CTLR_KMEM is not set | ||
163 | CONFIG_CGROUP_SCHED=y | ||
127 | CONFIG_FAIR_GROUP_SCHED=y | 164 | CONFIG_FAIR_GROUP_SCHED=y |
128 | CONFIG_FAIR_USER_SCHED=y | 165 | # CONFIG_CFS_BANDWIDTH is not set |
129 | # CONFIG_FAIR_CGROUP_SCHED is not set | 166 | # CONFIG_RT_GROUP_SCHED is not set |
167 | CONFIG_BLK_CGROUP=m | ||
168 | # CONFIG_DEBUG_BLK_CGROUP is not set | ||
169 | # CONFIG_CHECKPOINT_RESTORE is not set | ||
170 | CONFIG_NAMESPACES=y | ||
171 | CONFIG_UTS_NS=y | ||
172 | CONFIG_IPC_NS=y | ||
173 | # CONFIG_USER_NS is not set | ||
174 | # CONFIG_PID_NS is not set | ||
175 | CONFIG_NET_NS=y | ||
176 | # CONFIG_SCHED_AUTOGROUP is not set | ||
177 | CONFIG_MM_OWNER=y | ||
130 | CONFIG_SYSFS_DEPRECATED=y | 178 | CONFIG_SYSFS_DEPRECATED=y |
179 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
131 | # CONFIG_RELAY is not set | 180 | # CONFIG_RELAY is not set |
132 | # CONFIG_BLK_DEV_INITRD is not set | 181 | # CONFIG_BLK_DEV_INITRD is not set |
133 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 182 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
134 | CONFIG_SYSCTL=y | 183 | CONFIG_SYSCTL=y |
184 | CONFIG_ANON_INODES=y | ||
135 | # CONFIG_EXPERT is not set | 185 | # CONFIG_EXPERT is not set |
136 | CONFIG_UID16=y | 186 | CONFIG_UID16=y |
137 | CONFIG_SYSCTL_SYSCALL=y | 187 | # CONFIG_SYSCTL_SYSCALL is not set |
138 | CONFIG_KALLSYMS=y | 188 | CONFIG_KALLSYMS=y |
139 | # CONFIG_KALLSYMS_ALL is not set | 189 | # CONFIG_KALLSYMS_ALL is not set |
140 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
141 | CONFIG_HOTPLUG=y | 190 | CONFIG_HOTPLUG=y |
142 | CONFIG_PRINTK=y | 191 | CONFIG_PRINTK=y |
143 | CONFIG_BUG=y | 192 | CONFIG_BUG=y |
144 | CONFIG_ELF_CORE=y | 193 | CONFIG_ELF_CORE=y |
145 | CONFIG_BASE_FULL=y | 194 | CONFIG_BASE_FULL=y |
146 | CONFIG_FUTEX=y | 195 | CONFIG_FUTEX=y |
147 | CONFIG_ANON_INODES=y | ||
148 | CONFIG_EPOLL=y | 196 | CONFIG_EPOLL=y |
149 | CONFIG_SIGNALFD=y | 197 | CONFIG_SIGNALFD=y |
150 | CONFIG_TIMERFD=y | 198 | CONFIG_TIMERFD=y |
151 | CONFIG_EVENTFD=y | 199 | CONFIG_EVENTFD=y |
152 | CONFIG_SHMEM=y | 200 | CONFIG_SHMEM=y |
201 | CONFIG_AIO=y | ||
202 | # CONFIG_EMBEDDED is not set | ||
203 | |||
204 | # | ||
205 | # Kernel Performance Events And Counters | ||
206 | # | ||
153 | CONFIG_VM_EVENT_COUNTERS=y | 207 | CONFIG_VM_EVENT_COUNTERS=y |
208 | CONFIG_COMPAT_BRK=y | ||
154 | CONFIG_SLAB=y | 209 | CONFIG_SLAB=y |
155 | # CONFIG_SLUB is not set | 210 | # CONFIG_SLUB is not set |
156 | # CONFIG_SLOB is not set | ||
157 | # CONFIG_PROFILING is not set | 211 | # CONFIG_PROFILING is not set |
158 | # CONFIG_MARKERS is not set | 212 | |
159 | # CONFIG_HAVE_OPROFILE is not set | 213 | # |
160 | # CONFIG_HAVE_KPROBES is not set | 214 | # GCOV-based kernel profiling |
161 | CONFIG_PROC_PAGE_MONITOR=y | 215 | # |
216 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
162 | CONFIG_SLABINFO=y | 217 | CONFIG_SLABINFO=y |
163 | CONFIG_RT_MUTEXES=y | 218 | CONFIG_RT_MUTEXES=y |
164 | # CONFIG_TINY_SHMEM is not set | ||
165 | CONFIG_BASE_SMALL=0 | 219 | CONFIG_BASE_SMALL=0 |
166 | CONFIG_MODULES=y | 220 | CONFIG_MODULES=y |
221 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
167 | CONFIG_MODULE_UNLOAD=y | 222 | CONFIG_MODULE_UNLOAD=y |
168 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 223 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
169 | # CONFIG_MODVERSIONS is not set | 224 | # CONFIG_MODVERSIONS is not set |
170 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 225 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
171 | CONFIG_KMOD=y | ||
172 | CONFIG_BLOCK=y | 226 | CONFIG_BLOCK=y |
173 | # CONFIG_LBD is not set | 227 | CONFIG_LBDAF=y |
174 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
175 | # CONFIG_LSF is not set | ||
176 | # CONFIG_BLK_DEV_BSG is not set | 228 | # CONFIG_BLK_DEV_BSG is not set |
229 | # CONFIG_BLK_DEV_BSGLIB is not set | ||
230 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
231 | |||
232 | # | ||
233 | # Partition Types | ||
234 | # | ||
235 | # CONFIG_PARTITION_ADVANCED is not set | ||
236 | CONFIG_MSDOS_PARTITION=y | ||
177 | 237 | ||
178 | # | 238 | # |
179 | # IO Schedulers | 239 | # IO Schedulers |
180 | # | 240 | # |
181 | CONFIG_IOSCHED_NOOP=y | 241 | CONFIG_IOSCHED_NOOP=y |
182 | CONFIG_IOSCHED_AS=y | ||
183 | CONFIG_IOSCHED_DEADLINE=y | 242 | CONFIG_IOSCHED_DEADLINE=y |
184 | CONFIG_IOSCHED_CFQ=y | 243 | CONFIG_IOSCHED_CFQ=m |
185 | CONFIG_DEFAULT_AS=y | 244 | # CONFIG_CFQ_GROUP_IOSCHED is not set |
186 | # CONFIG_DEFAULT_DEADLINE is not set | 245 | CONFIG_DEFAULT_DEADLINE=y |
187 | # CONFIG_DEFAULT_CFQ is not set | 246 | # CONFIG_DEFAULT_CFQ is not set |
188 | # CONFIG_DEFAULT_NOOP is not set | 247 | # CONFIG_DEFAULT_NOOP is not set |
189 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 248 | CONFIG_DEFAULT_IOSCHED="deadline" |
190 | CONFIG_CLASSIC_RCU=y | 249 | # CONFIG_INLINE_SPIN_TRYLOCK is not set |
191 | # CONFIG_PREEMPT_RCU is not set | 250 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set |
192 | CONFIG_BLK_DEV=y | 251 | # CONFIG_INLINE_SPIN_LOCK is not set |
193 | CONFIG_BLK_DEV_UBD=y | 252 | # CONFIG_INLINE_SPIN_LOCK_BH is not set |
194 | # CONFIG_BLK_DEV_UBD_SYNC is not set | 253 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set |
195 | CONFIG_BLK_DEV_COW_COMMON=y | 254 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set |
196 | CONFIG_BLK_DEV_LOOP=m | 255 | CONFIG_INLINE_SPIN_UNLOCK=y |
197 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 256 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set |
198 | CONFIG_BLK_DEV_NBD=m | 257 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y |
199 | # CONFIG_BLK_DEV_RAM is not set | 258 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set |
200 | # CONFIG_ATA_OVER_ETH is not set | 259 | # CONFIG_INLINE_READ_TRYLOCK is not set |
260 | # CONFIG_INLINE_READ_LOCK is not set | ||
261 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
262 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
263 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
264 | CONFIG_INLINE_READ_UNLOCK=y | ||
265 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
266 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
267 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
268 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
269 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
270 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
271 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
272 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
273 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
274 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
275 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
276 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
277 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
278 | CONFIG_FREEZER=y | ||
201 | 279 | ||
202 | # | 280 | # |
203 | # Character Devices | 281 | # UML Character Devices |
204 | # | 282 | # |
205 | CONFIG_STDERR_CONSOLE=y | 283 | CONFIG_STDERR_CONSOLE=y |
206 | CONFIG_STDIO_CONSOLE=y | 284 | CONFIG_STDIO_CONSOLE=y |
@@ -214,40 +292,191 @@ CONFIG_XTERM_CHAN=y | |||
214 | CONFIG_CON_ZERO_CHAN="fd:0,fd:1" | 292 | CONFIG_CON_ZERO_CHAN="fd:0,fd:1" |
215 | CONFIG_CON_CHAN="xterm" | 293 | CONFIG_CON_CHAN="xterm" |
216 | CONFIG_SSL_CHAN="pts" | 294 | CONFIG_SSL_CHAN="pts" |
217 | CONFIG_UNIX98_PTYS=y | ||
218 | CONFIG_LEGACY_PTYS=y | ||
219 | # CONFIG_RAW_DRIVER is not set | ||
220 | CONFIG_LEGACY_PTY_COUNT=32 | ||
221 | # CONFIG_WATCHDOG is not set | ||
222 | CONFIG_UML_SOUND=m | 295 | CONFIG_UML_SOUND=m |
223 | CONFIG_SOUND=m | 296 | CONFIG_SOUND=m |
297 | CONFIG_SOUND_OSS_CORE=y | ||
224 | CONFIG_HOSTAUDIO=m | 298 | CONFIG_HOSTAUDIO=m |
225 | # CONFIG_HW_RANDOM is not set | 299 | |
226 | CONFIG_UML_RANDOM=y | 300 | # |
227 | # CONFIG_MMAPPER is not set | 301 | # Device Drivers |
302 | # | ||
228 | 303 | ||
229 | # | 304 | # |
230 | # Generic Driver Options | 305 | # Generic Driver Options |
231 | # | 306 | # |
232 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 307 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
308 | CONFIG_DEVTMPFS=y | ||
309 | CONFIG_DEVTMPFS_MOUNT=y | ||
233 | CONFIG_STANDALONE=y | 310 | CONFIG_STANDALONE=y |
234 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 311 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
235 | # CONFIG_FW_LOADER is not set | 312 | CONFIG_FW_LOADER=y |
313 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
314 | CONFIG_EXTRA_FIRMWARE="" | ||
236 | # CONFIG_DEBUG_DRIVER is not set | 315 | # CONFIG_DEBUG_DRIVER is not set |
237 | # CONFIG_DEBUG_DEVRES is not set | 316 | # CONFIG_DEBUG_DEVRES is not set |
238 | # CONFIG_SYS_HYPERVISOR is not set | 317 | # CONFIG_SYS_HYPERVISOR is not set |
318 | CONFIG_GENERIC_CPU_DEVICES=y | ||
319 | # CONFIG_DMA_SHARED_BUFFER is not set | ||
320 | # CONFIG_CONNECTOR is not set | ||
321 | # CONFIG_MTD is not set | ||
322 | CONFIG_BLK_DEV=y | ||
323 | CONFIG_BLK_DEV_UBD=y | ||
324 | # CONFIG_BLK_DEV_UBD_SYNC is not set | ||
325 | CONFIG_BLK_DEV_COW_COMMON=y | ||
326 | CONFIG_BLK_DEV_LOOP=m | ||
327 | CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 | ||
328 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
329 | |||
330 | # | ||
331 | # DRBD disabled because PROC_FS, INET or CONNECTOR not selected | ||
332 | # | ||
333 | CONFIG_BLK_DEV_NBD=m | ||
334 | # CONFIG_BLK_DEV_RAM is not set | ||
335 | # CONFIG_ATA_OVER_ETH is not set | ||
336 | # CONFIG_BLK_DEV_RBD is not set | ||
337 | |||
338 | # | ||
339 | # Misc devices | ||
340 | # | ||
341 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
342 | # CONFIG_C2PORT is not set | ||
343 | |||
344 | # | ||
345 | # EEPROM support | ||
346 | # | ||
347 | # CONFIG_EEPROM_93CX6 is not set | ||
348 | |||
349 | # | ||
350 | # Texas Instruments shared transport line discipline | ||
351 | # | ||
352 | |||
353 | # | ||
354 | # Altera FPGA firmware download module | ||
355 | # | ||
356 | |||
357 | # | ||
358 | # SCSI device support | ||
359 | # | ||
360 | CONFIG_SCSI_MOD=y | ||
361 | # CONFIG_RAID_ATTRS is not set | ||
362 | # CONFIG_SCSI is not set | ||
363 | # CONFIG_SCSI_DMA is not set | ||
364 | # CONFIG_SCSI_NETLINK is not set | ||
365 | # CONFIG_MD is not set | ||
366 | CONFIG_NETDEVICES=y | ||
367 | CONFIG_NET_CORE=y | ||
368 | # CONFIG_BONDING is not set | ||
369 | CONFIG_DUMMY=m | ||
370 | # CONFIG_EQUALIZER is not set | ||
371 | # CONFIG_MII is not set | ||
372 | # CONFIG_NET_TEAM is not set | ||
373 | # CONFIG_MACVLAN is not set | ||
374 | # CONFIG_NETCONSOLE is not set | ||
375 | # CONFIG_NETPOLL is not set | ||
376 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
377 | CONFIG_TUN=m | ||
378 | # CONFIG_VETH is not set | ||
379 | |||
380 | # | ||
381 | # CAIF transport drivers | ||
382 | # | ||
383 | CONFIG_ETHERNET=y | ||
384 | CONFIG_NET_VENDOR_CHELSIO=y | ||
385 | CONFIG_NET_VENDOR_INTEL=y | ||
386 | CONFIG_NET_VENDOR_I825XX=y | ||
387 | CONFIG_NET_VENDOR_MARVELL=y | ||
388 | CONFIG_NET_VENDOR_NATSEMI=y | ||
389 | CONFIG_NET_VENDOR_8390=y | ||
390 | # CONFIG_PHYLIB is not set | ||
391 | CONFIG_PPP=m | ||
392 | # CONFIG_PPP_BSDCOMP is not set | ||
393 | # CONFIG_PPP_DEFLATE is not set | ||
394 | # CONFIG_PPP_FILTER is not set | ||
395 | # CONFIG_PPP_MPPE is not set | ||
396 | # CONFIG_PPP_MULTILINK is not set | ||
397 | # CONFIG_PPPOE is not set | ||
398 | # CONFIG_PPP_ASYNC is not set | ||
399 | # CONFIG_PPP_SYNC_TTY is not set | ||
400 | CONFIG_SLIP=m | ||
401 | CONFIG_SLHC=m | ||
402 | # CONFIG_SLIP_COMPRESSED is not set | ||
403 | # CONFIG_SLIP_SMART is not set | ||
404 | # CONFIG_SLIP_MODE_SLIP6 is not set | ||
405 | CONFIG_WLAN=y | ||
406 | # CONFIG_HOSTAP is not set | ||
407 | |||
408 | # | ||
409 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
410 | # | ||
411 | # CONFIG_WAN is not set | ||
412 | |||
413 | # | ||
414 | # Character devices | ||
415 | # | ||
416 | CONFIG_UNIX98_PTYS=y | ||
417 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
418 | CONFIG_LEGACY_PTYS=y | ||
419 | CONFIG_LEGACY_PTY_COUNT=32 | ||
420 | # CONFIG_N_GSM is not set | ||
421 | # CONFIG_TRACE_SINK is not set | ||
422 | CONFIG_DEVKMEM=y | ||
423 | # CONFIG_HW_RANDOM is not set | ||
424 | CONFIG_UML_RANDOM=y | ||
425 | # CONFIG_R3964 is not set | ||
426 | # CONFIG_NSC_GPIO is not set | ||
427 | # CONFIG_RAW_DRIVER is not set | ||
428 | |||
429 | # | ||
430 | # PPS support | ||
431 | # | ||
432 | # CONFIG_PPS is not set | ||
433 | |||
434 | # | ||
435 | # PPS generators support | ||
436 | # | ||
437 | |||
438 | # | ||
439 | # PTP clock support | ||
440 | # | ||
441 | |||
442 | # | ||
443 | # Enable Device Drivers -> PPS to see the PTP clock options. | ||
444 | # | ||
445 | # CONFIG_POWER_SUPPLY is not set | ||
446 | # CONFIG_THERMAL is not set | ||
447 | # CONFIG_WATCHDOG is not set | ||
448 | # CONFIG_REGULATOR is not set | ||
449 | CONFIG_SOUND_OSS_CORE_PRECLAIM=y | ||
450 | # CONFIG_MEMSTICK is not set | ||
451 | # CONFIG_NEW_LEDS is not set | ||
452 | # CONFIG_ACCESSIBILITY is not set | ||
453 | # CONFIG_AUXDISPLAY is not set | ||
454 | # CONFIG_UIO is not set | ||
455 | |||
456 | # | ||
457 | # Virtio drivers | ||
458 | # | ||
459 | # CONFIG_VIRTIO_BALLOON is not set | ||
460 | |||
461 | # | ||
462 | # Microsoft Hyper-V guest support | ||
463 | # | ||
464 | # CONFIG_STAGING is not set | ||
239 | 465 | ||
240 | # | 466 | # |
241 | # Networking | 467 | # Hardware Spinlock drivers |
242 | # | 468 | # |
469 | CONFIG_IOMMU_SUPPORT=y | ||
470 | # CONFIG_VIRT_DRIVERS is not set | ||
471 | # CONFIG_PM_DEVFREQ is not set | ||
243 | CONFIG_NET=y | 472 | CONFIG_NET=y |
244 | 473 | ||
245 | # | 474 | # |
246 | # Networking options | 475 | # Networking options |
247 | # | 476 | # |
248 | CONFIG_PACKET=y | 477 | CONFIG_PACKET=y |
249 | CONFIG_PACKET_MMAP=y | ||
250 | CONFIG_UNIX=y | 478 | CONFIG_UNIX=y |
479 | # CONFIG_UNIX_DIAG is not set | ||
251 | CONFIG_XFRM=y | 480 | CONFIG_XFRM=y |
252 | # CONFIG_XFRM_USER is not set | 481 | # CONFIG_XFRM_USER is not set |
253 | # CONFIG_XFRM_SUB_POLICY is not set | 482 | # CONFIG_XFRM_SUB_POLICY is not set |
@@ -257,10 +486,9 @@ CONFIG_XFRM=y | |||
257 | CONFIG_INET=y | 486 | CONFIG_INET=y |
258 | # CONFIG_IP_MULTICAST is not set | 487 | # CONFIG_IP_MULTICAST is not set |
259 | # CONFIG_IP_ADVANCED_ROUTER is not set | 488 | # CONFIG_IP_ADVANCED_ROUTER is not set |
260 | CONFIG_IP_FIB_HASH=y | ||
261 | # CONFIG_IP_PNP is not set | 489 | # CONFIG_IP_PNP is not set |
262 | # CONFIG_NET_IPIP is not set | 490 | # CONFIG_NET_IPIP is not set |
263 | # CONFIG_NET_IPGRE is not set | 491 | # CONFIG_NET_IPGRE_DEMUX is not set |
264 | # CONFIG_ARPD is not set | 492 | # CONFIG_ARPD is not set |
265 | # CONFIG_SYN_COOKIES is not set | 493 | # CONFIG_SYN_COOKIES is not set |
266 | # CONFIG_INET_AH is not set | 494 | # CONFIG_INET_AH is not set |
@@ -274,20 +502,23 @@ CONFIG_INET_XFRM_MODE_BEET=y | |||
274 | # CONFIG_INET_LRO is not set | 502 | # CONFIG_INET_LRO is not set |
275 | CONFIG_INET_DIAG=y | 503 | CONFIG_INET_DIAG=y |
276 | CONFIG_INET_TCP_DIAG=y | 504 | CONFIG_INET_TCP_DIAG=y |
505 | # CONFIG_INET_UDP_DIAG is not set | ||
277 | # CONFIG_TCP_CONG_ADVANCED is not set | 506 | # CONFIG_TCP_CONG_ADVANCED is not set |
278 | CONFIG_TCP_CONG_CUBIC=y | 507 | CONFIG_TCP_CONG_CUBIC=y |
279 | CONFIG_DEFAULT_TCP_CONG="cubic" | 508 | CONFIG_DEFAULT_TCP_CONG="cubic" |
280 | # CONFIG_TCP_MD5SIG is not set | 509 | # CONFIG_TCP_MD5SIG is not set |
281 | # CONFIG_IPV6 is not set | 510 | # CONFIG_IPV6 is not set |
282 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
283 | # CONFIG_INET6_TUNNEL is not set | ||
284 | # CONFIG_NETWORK_SECMARK is not set | 511 | # CONFIG_NETWORK_SECMARK is not set |
512 | # CONFIG_NETWORK_PHY_TIMESTAMPING is not set | ||
285 | # CONFIG_NETFILTER is not set | 513 | # CONFIG_NETFILTER is not set |
286 | # CONFIG_IP_DCCP is not set | 514 | # CONFIG_IP_DCCP is not set |
287 | # CONFIG_IP_SCTP is not set | 515 | # CONFIG_IP_SCTP is not set |
516 | # CONFIG_RDS is not set | ||
288 | # CONFIG_TIPC is not set | 517 | # CONFIG_TIPC is not set |
289 | # CONFIG_ATM is not set | 518 | # CONFIG_ATM is not set |
519 | # CONFIG_L2TP is not set | ||
290 | # CONFIG_BRIDGE is not set | 520 | # CONFIG_BRIDGE is not set |
521 | # CONFIG_NET_DSA is not set | ||
291 | # CONFIG_VLAN_8021Q is not set | 522 | # CONFIG_VLAN_8021Q is not set |
292 | # CONFIG_DECNET is not set | 523 | # CONFIG_DECNET is not set |
293 | # CONFIG_LLC2 is not set | 524 | # CONFIG_LLC2 is not set |
@@ -297,7 +528,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
297 | # CONFIG_LAPB is not set | 528 | # CONFIG_LAPB is not set |
298 | # CONFIG_ECONET is not set | 529 | # CONFIG_ECONET is not set |
299 | # CONFIG_WAN_ROUTER is not set | 530 | # CONFIG_WAN_ROUTER is not set |
531 | # CONFIG_PHONET is not set | ||
532 | # CONFIG_IEEE802154 is not set | ||
300 | # CONFIG_NET_SCHED is not set | 533 | # CONFIG_NET_SCHED is not set |
534 | # CONFIG_DCB is not set | ||
535 | # CONFIG_BATMAN_ADV is not set | ||
536 | # CONFIG_OPENVSWITCH is not set | ||
537 | # CONFIG_NETPRIO_CGROUP is not set | ||
538 | CONFIG_BQL=y | ||
301 | 539 | ||
302 | # | 540 | # |
303 | # Network testing | 541 | # Network testing |
@@ -308,16 +546,19 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
308 | # CONFIG_IRDA is not set | 546 | # CONFIG_IRDA is not set |
309 | # CONFIG_BT is not set | 547 | # CONFIG_BT is not set |
310 | # CONFIG_AF_RXRPC is not set | 548 | # CONFIG_AF_RXRPC is not set |
549 | CONFIG_WIRELESS=y | ||
550 | # CONFIG_CFG80211 is not set | ||
551 | # CONFIG_LIB80211 is not set | ||
311 | 552 | ||
312 | # | 553 | # |
313 | # Wireless | 554 | # CFG80211 needs to be enabled for MAC80211 |
314 | # | 555 | # |
315 | # CONFIG_CFG80211 is not set | 556 | # CONFIG_WIMAX is not set |
316 | # CONFIG_WIRELESS_EXT is not set | ||
317 | # CONFIG_MAC80211 is not set | ||
318 | # CONFIG_IEEE80211 is not set | ||
319 | # CONFIG_RFKILL is not set | 557 | # CONFIG_RFKILL is not set |
320 | # CONFIG_NET_9P is not set | 558 | # CONFIG_NET_9P is not set |
559 | # CONFIG_CAIF is not set | ||
560 | # CONFIG_CEPH_LIB is not set | ||
561 | # CONFIG_NFC is not set | ||
321 | 562 | ||
322 | # | 563 | # |
323 | # UML Network Devices | 564 | # UML Network Devices |
@@ -331,76 +572,51 @@ CONFIG_UML_NET_DAEMON=y | |||
331 | CONFIG_UML_NET_MCAST=y | 572 | CONFIG_UML_NET_MCAST=y |
332 | # CONFIG_UML_NET_PCAP is not set | 573 | # CONFIG_UML_NET_PCAP is not set |
333 | CONFIG_UML_NET_SLIRP=y | 574 | CONFIG_UML_NET_SLIRP=y |
334 | CONFIG_NETDEVICES=y | ||
335 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
336 | CONFIG_DUMMY=m | ||
337 | # CONFIG_BONDING is not set | ||
338 | # CONFIG_MACVLAN is not set | ||
339 | # CONFIG_EQUALIZER is not set | ||
340 | CONFIG_TUN=m | ||
341 | # CONFIG_VETH is not set | ||
342 | |||
343 | # | ||
344 | # Wireless LAN | ||
345 | # | ||
346 | # CONFIG_WLAN_PRE80211 is not set | ||
347 | # CONFIG_WLAN_80211 is not set | ||
348 | # CONFIG_WAN is not set | ||
349 | CONFIG_PPP=m | ||
350 | # CONFIG_PPP_MULTILINK is not set | ||
351 | # CONFIG_PPP_FILTER is not set | ||
352 | # CONFIG_PPP_ASYNC is not set | ||
353 | # CONFIG_PPP_SYNC_TTY is not set | ||
354 | # CONFIG_PPP_DEFLATE is not set | ||
355 | # CONFIG_PPP_BSDCOMP is not set | ||
356 | # CONFIG_PPP_MPPE is not set | ||
357 | # CONFIG_PPPOE is not set | ||
358 | # CONFIG_PPPOL2TP is not set | ||
359 | CONFIG_SLIP=m | ||
360 | # CONFIG_SLIP_COMPRESSED is not set | ||
361 | CONFIG_SLHC=m | ||
362 | # CONFIG_SLIP_SMART is not set | ||
363 | # CONFIG_SLIP_MODE_SLIP6 is not set | ||
364 | # CONFIG_NETCONSOLE is not set | ||
365 | # CONFIG_NETPOLL is not set | ||
366 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
367 | # CONFIG_CONNECTOR is not set | ||
368 | 575 | ||
369 | # | 576 | # |
370 | # File systems | 577 | # File systems |
371 | # | 578 | # |
372 | CONFIG_EXT2_FS=y | 579 | # CONFIG_EXT2_FS is not set |
373 | # CONFIG_EXT2_FS_XATTR is not set | 580 | # CONFIG_EXT3_FS is not set |
374 | # CONFIG_EXT2_FS_XIP is not set | 581 | CONFIG_EXT4_FS=y |
375 | CONFIG_EXT3_FS=y | 582 | CONFIG_EXT4_USE_FOR_EXT23=y |
376 | # CONFIG_EXT3_FS_XATTR is not set | 583 | CONFIG_EXT4_FS_XATTR=y |
377 | # CONFIG_EXT4DEV_FS is not set | 584 | # CONFIG_EXT4_FS_POSIX_ACL is not set |
378 | CONFIG_JBD=y | 585 | # CONFIG_EXT4_FS_SECURITY is not set |
586 | # CONFIG_EXT4_DEBUG is not set | ||
587 | CONFIG_JBD2=y | ||
588 | CONFIG_FS_MBCACHE=y | ||
379 | CONFIG_REISERFS_FS=y | 589 | CONFIG_REISERFS_FS=y |
380 | # CONFIG_REISERFS_CHECK is not set | 590 | # CONFIG_REISERFS_CHECK is not set |
381 | # CONFIG_REISERFS_PROC_INFO is not set | 591 | # CONFIG_REISERFS_PROC_INFO is not set |
382 | # CONFIG_REISERFS_FS_XATTR is not set | 592 | # CONFIG_REISERFS_FS_XATTR is not set |
383 | # CONFIG_JFS_FS is not set | 593 | # CONFIG_JFS_FS is not set |
384 | # CONFIG_FS_POSIX_ACL is not set | ||
385 | # CONFIG_XFS_FS is not set | 594 | # CONFIG_XFS_FS is not set |
386 | # CONFIG_GFS2_FS is not set | 595 | # CONFIG_GFS2_FS is not set |
387 | # CONFIG_OCFS2_FS is not set | 596 | # CONFIG_BTRFS_FS is not set |
388 | # CONFIG_MINIX_FS is not set | 597 | # CONFIG_NILFS2_FS is not set |
389 | # CONFIG_ROMFS_FS is not set | 598 | # CONFIG_FS_POSIX_ACL is not set |
390 | CONFIG_INOTIFY=y | 599 | CONFIG_FILE_LOCKING=y |
600 | CONFIG_FSNOTIFY=y | ||
601 | CONFIG_DNOTIFY=y | ||
391 | CONFIG_INOTIFY_USER=y | 602 | CONFIG_INOTIFY_USER=y |
603 | # CONFIG_FANOTIFY is not set | ||
392 | CONFIG_QUOTA=y | 604 | CONFIG_QUOTA=y |
393 | # CONFIG_QUOTA_NETLINK_INTERFACE is not set | 605 | # CONFIG_QUOTA_NETLINK_INTERFACE is not set |
394 | CONFIG_PRINT_QUOTA_WARNING=y | 606 | CONFIG_PRINT_QUOTA_WARNING=y |
607 | # CONFIG_QUOTA_DEBUG is not set | ||
395 | # CONFIG_QFMT_V1 is not set | 608 | # CONFIG_QFMT_V1 is not set |
396 | # CONFIG_QFMT_V2 is not set | 609 | # CONFIG_QFMT_V2 is not set |
397 | CONFIG_QUOTACTL=y | 610 | CONFIG_QUOTACTL=y |
398 | CONFIG_DNOTIFY=y | ||
399 | CONFIG_AUTOFS_FS=m | ||
400 | CONFIG_AUTOFS4_FS=m | 611 | CONFIG_AUTOFS4_FS=m |
401 | # CONFIG_FUSE_FS is not set | 612 | # CONFIG_FUSE_FS is not set |
402 | 613 | ||
403 | # | 614 | # |
615 | # Caches | ||
616 | # | ||
617 | # CONFIG_FSCACHE is not set | ||
618 | |||
619 | # | ||
404 | # CD-ROM/DVD Filesystems | 620 | # CD-ROM/DVD Filesystems |
405 | # | 621 | # |
406 | CONFIG_ISO9660_FS=m | 622 | CONFIG_ISO9660_FS=m |
@@ -421,15 +637,14 @@ CONFIG_JOLIET=y | |||
421 | CONFIG_PROC_FS=y | 637 | CONFIG_PROC_FS=y |
422 | CONFIG_PROC_KCORE=y | 638 | CONFIG_PROC_KCORE=y |
423 | CONFIG_PROC_SYSCTL=y | 639 | CONFIG_PROC_SYSCTL=y |
640 | CONFIG_PROC_PAGE_MONITOR=y | ||
424 | CONFIG_SYSFS=y | 641 | CONFIG_SYSFS=y |
425 | CONFIG_TMPFS=y | 642 | CONFIG_TMPFS=y |
426 | # CONFIG_TMPFS_POSIX_ACL is not set | 643 | # CONFIG_TMPFS_POSIX_ACL is not set |
644 | # CONFIG_TMPFS_XATTR is not set | ||
427 | # CONFIG_HUGETLB_PAGE is not set | 645 | # CONFIG_HUGETLB_PAGE is not set |
428 | # CONFIG_CONFIGFS_FS is not set | 646 | # CONFIG_CONFIGFS_FS is not set |
429 | 647 | CONFIG_MISC_FILESYSTEMS=y | |
430 | # | ||
431 | # Miscellaneous filesystems | ||
432 | # | ||
433 | # CONFIG_ADFS_FS is not set | 648 | # CONFIG_ADFS_FS is not set |
434 | # CONFIG_AFFS_FS is not set | 649 | # CONFIG_AFFS_FS is not set |
435 | # CONFIG_HFS_FS is not set | 650 | # CONFIG_HFS_FS is not set |
@@ -437,26 +652,26 @@ CONFIG_TMPFS=y | |||
437 | # CONFIG_BEFS_FS is not set | 652 | # CONFIG_BEFS_FS is not set |
438 | # CONFIG_BFS_FS is not set | 653 | # CONFIG_BFS_FS is not set |
439 | # CONFIG_EFS_FS is not set | 654 | # CONFIG_EFS_FS is not set |
655 | # CONFIG_LOGFS is not set | ||
440 | # CONFIG_CRAMFS is not set | 656 | # CONFIG_CRAMFS is not set |
657 | # CONFIG_SQUASHFS is not set | ||
441 | # CONFIG_VXFS_FS is not set | 658 | # CONFIG_VXFS_FS is not set |
659 | # CONFIG_MINIX_FS is not set | ||
660 | # CONFIG_OMFS_FS is not set | ||
442 | # CONFIG_HPFS_FS is not set | 661 | # CONFIG_HPFS_FS is not set |
443 | # CONFIG_QNX4FS_FS is not set | 662 | # CONFIG_QNX4FS_FS is not set |
663 | # CONFIG_ROMFS_FS is not set | ||
664 | # CONFIG_PSTORE is not set | ||
444 | # CONFIG_SYSV_FS is not set | 665 | # CONFIG_SYSV_FS is not set |
445 | # CONFIG_UFS_FS is not set | 666 | # CONFIG_UFS_FS is not set |
446 | CONFIG_NETWORK_FILESYSTEMS=y | 667 | CONFIG_NETWORK_FILESYSTEMS=y |
447 | # CONFIG_NFS_FS is not set | 668 | # CONFIG_NFS_FS is not set |
448 | # CONFIG_NFSD is not set | 669 | # CONFIG_NFSD is not set |
449 | # CONFIG_SMB_FS is not set | 670 | # CONFIG_CEPH_FS is not set |
450 | # CONFIG_CIFS is not set | 671 | # CONFIG_CIFS is not set |
451 | # CONFIG_NCP_FS is not set | 672 | # CONFIG_NCP_FS is not set |
452 | # CONFIG_CODA_FS is not set | 673 | # CONFIG_CODA_FS is not set |
453 | # CONFIG_AFS_FS is not set | 674 | # CONFIG_AFS_FS is not set |
454 | |||
455 | # | ||
456 | # Partition Types | ||
457 | # | ||
458 | # CONFIG_PARTITION_ADVANCED is not set | ||
459 | CONFIG_MSDOS_PARTITION=y | ||
460 | CONFIG_NLS=y | 675 | CONFIG_NLS=y |
461 | CONFIG_NLS_DEFAULT="iso8859-1" | 676 | CONFIG_NLS_DEFAULT="iso8859-1" |
462 | # CONFIG_NLS_CODEPAGE_437 is not set | 677 | # CONFIG_NLS_CODEPAGE_437 is not set |
@@ -497,119 +712,191 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
497 | # CONFIG_NLS_KOI8_R is not set | 712 | # CONFIG_NLS_KOI8_R is not set |
498 | # CONFIG_NLS_KOI8_U is not set | 713 | # CONFIG_NLS_KOI8_U is not set |
499 | # CONFIG_NLS_UTF8 is not set | 714 | # CONFIG_NLS_UTF8 is not set |
500 | # CONFIG_DLM is not set | ||
501 | 715 | ||
502 | # | 716 | # |
503 | # Security options | 717 | # Security options |
504 | # | 718 | # |
505 | # CONFIG_KEYS is not set | 719 | # CONFIG_KEYS is not set |
720 | # CONFIG_SECURITY_DMESG_RESTRICT is not set | ||
506 | # CONFIG_SECURITY is not set | 721 | # CONFIG_SECURITY is not set |
507 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 722 | # CONFIG_SECURITYFS is not set |
723 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
724 | CONFIG_DEFAULT_SECURITY="" | ||
508 | CONFIG_CRYPTO=y | 725 | CONFIG_CRYPTO=y |
509 | # CONFIG_CRYPTO_SEQIV is not set | 726 | |
727 | # | ||
728 | # Crypto core or helper | ||
729 | # | ||
730 | # CONFIG_CRYPTO_FIPS is not set | ||
731 | CONFIG_CRYPTO_ALGAPI=m | ||
732 | CONFIG_CRYPTO_ALGAPI2=m | ||
733 | CONFIG_CRYPTO_RNG=m | ||
734 | CONFIG_CRYPTO_RNG2=m | ||
510 | # CONFIG_CRYPTO_MANAGER is not set | 735 | # CONFIG_CRYPTO_MANAGER is not set |
736 | # CONFIG_CRYPTO_MANAGER2 is not set | ||
737 | # CONFIG_CRYPTO_USER is not set | ||
738 | # CONFIG_CRYPTO_GF128MUL is not set | ||
739 | # CONFIG_CRYPTO_NULL is not set | ||
740 | # CONFIG_CRYPTO_CRYPTD is not set | ||
741 | # CONFIG_CRYPTO_AUTHENC is not set | ||
742 | # CONFIG_CRYPTO_TEST is not set | ||
743 | |||
744 | # | ||
745 | # Authenticated Encryption with Associated Data | ||
746 | # | ||
747 | # CONFIG_CRYPTO_CCM is not set | ||
748 | # CONFIG_CRYPTO_GCM is not set | ||
749 | # CONFIG_CRYPTO_SEQIV is not set | ||
750 | |||
751 | # | ||
752 | # Block modes | ||
753 | # | ||
754 | # CONFIG_CRYPTO_CBC is not set | ||
755 | # CONFIG_CRYPTO_CTR is not set | ||
756 | # CONFIG_CRYPTO_CTS is not set | ||
757 | # CONFIG_CRYPTO_ECB is not set | ||
758 | # CONFIG_CRYPTO_LRW is not set | ||
759 | # CONFIG_CRYPTO_PCBC is not set | ||
760 | # CONFIG_CRYPTO_XTS is not set | ||
761 | |||
762 | # | ||
763 | # Hash modes | ||
764 | # | ||
511 | # CONFIG_CRYPTO_HMAC is not set | 765 | # CONFIG_CRYPTO_HMAC is not set |
512 | # CONFIG_CRYPTO_XCBC is not set | 766 | # CONFIG_CRYPTO_XCBC is not set |
513 | # CONFIG_CRYPTO_NULL is not set | 767 | # CONFIG_CRYPTO_VMAC is not set |
768 | |||
769 | # | ||
770 | # Digest | ||
771 | # | ||
772 | # CONFIG_CRYPTO_CRC32C is not set | ||
773 | # CONFIG_CRYPTO_GHASH is not set | ||
514 | # CONFIG_CRYPTO_MD4 is not set | 774 | # CONFIG_CRYPTO_MD4 is not set |
515 | # CONFIG_CRYPTO_MD5 is not set | 775 | # CONFIG_CRYPTO_MD5 is not set |
776 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
777 | # CONFIG_CRYPTO_RMD128 is not set | ||
778 | # CONFIG_CRYPTO_RMD160 is not set | ||
779 | # CONFIG_CRYPTO_RMD256 is not set | ||
780 | # CONFIG_CRYPTO_RMD320 is not set | ||
516 | # CONFIG_CRYPTO_SHA1 is not set | 781 | # CONFIG_CRYPTO_SHA1 is not set |
517 | # CONFIG_CRYPTO_SHA256 is not set | 782 | # CONFIG_CRYPTO_SHA256 is not set |
518 | # CONFIG_CRYPTO_SHA512 is not set | 783 | # CONFIG_CRYPTO_SHA512 is not set |
519 | # CONFIG_CRYPTO_WP512 is not set | ||
520 | # CONFIG_CRYPTO_TGR192 is not set | 784 | # CONFIG_CRYPTO_TGR192 is not set |
521 | # CONFIG_CRYPTO_GF128MUL is not set | 785 | # CONFIG_CRYPTO_WP512 is not set |
522 | # CONFIG_CRYPTO_ECB is not set | 786 | |
523 | # CONFIG_CRYPTO_CBC is not set | 787 | # |
524 | # CONFIG_CRYPTO_PCBC is not set | 788 | # Ciphers |
525 | # CONFIG_CRYPTO_LRW is not set | 789 | # |
526 | # CONFIG_CRYPTO_XTS is not set | 790 | CONFIG_CRYPTO_AES=m |
527 | # CONFIG_CRYPTO_CTR is not set | ||
528 | # CONFIG_CRYPTO_GCM is not set | ||
529 | # CONFIG_CRYPTO_CCM is not set | ||
530 | # CONFIG_CRYPTO_CRYPTD is not set | ||
531 | # CONFIG_CRYPTO_DES is not set | ||
532 | # CONFIG_CRYPTO_FCRYPT is not set | ||
533 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
534 | # CONFIG_CRYPTO_TWOFISH is not set | ||
535 | # CONFIG_CRYPTO_TWOFISH_586 is not set | ||
536 | # CONFIG_CRYPTO_SERPENT is not set | ||
537 | # CONFIG_CRYPTO_AES is not set | ||
538 | # CONFIG_CRYPTO_AES_586 is not set | 791 | # CONFIG_CRYPTO_AES_586 is not set |
792 | # CONFIG_CRYPTO_ANUBIS is not set | ||
793 | # CONFIG_CRYPTO_ARC4 is not set | ||
794 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
795 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
539 | # CONFIG_CRYPTO_CAST5 is not set | 796 | # CONFIG_CRYPTO_CAST5 is not set |
540 | # CONFIG_CRYPTO_CAST6 is not set | 797 | # CONFIG_CRYPTO_CAST6 is not set |
541 | # CONFIG_CRYPTO_TEA is not set | 798 | # CONFIG_CRYPTO_DES is not set |
542 | # CONFIG_CRYPTO_ARC4 is not set | 799 | # CONFIG_CRYPTO_FCRYPT is not set |
543 | # CONFIG_CRYPTO_KHAZAD is not set | 800 | # CONFIG_CRYPTO_KHAZAD is not set |
544 | # CONFIG_CRYPTO_ANUBIS is not set | ||
545 | # CONFIG_CRYPTO_SEED is not set | ||
546 | # CONFIG_CRYPTO_SALSA20 is not set | 801 | # CONFIG_CRYPTO_SALSA20 is not set |
547 | # CONFIG_CRYPTO_SALSA20_586 is not set | 802 | # CONFIG_CRYPTO_SALSA20_586 is not set |
803 | # CONFIG_CRYPTO_SEED is not set | ||
804 | # CONFIG_CRYPTO_SERPENT is not set | ||
805 | # CONFIG_CRYPTO_TEA is not set | ||
806 | # CONFIG_CRYPTO_TWOFISH is not set | ||
807 | # CONFIG_CRYPTO_TWOFISH_586 is not set | ||
808 | |||
809 | # | ||
810 | # Compression | ||
811 | # | ||
548 | # CONFIG_CRYPTO_DEFLATE is not set | 812 | # CONFIG_CRYPTO_DEFLATE is not set |
549 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 813 | # CONFIG_CRYPTO_ZLIB is not set |
550 | # CONFIG_CRYPTO_CRC32C is not set | ||
551 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
552 | # CONFIG_CRYPTO_TEST is not set | ||
553 | # CONFIG_CRYPTO_AUTHENC is not set | ||
554 | # CONFIG_CRYPTO_LZO is not set | 814 | # CONFIG_CRYPTO_LZO is not set |
815 | |||
816 | # | ||
817 | # Random Number Generation | ||
818 | # | ||
819 | CONFIG_CRYPTO_ANSI_CPRNG=m | ||
820 | # CONFIG_CRYPTO_USER_API_HASH is not set | ||
821 | # CONFIG_CRYPTO_USER_API_SKCIPHER is not set | ||
555 | CONFIG_CRYPTO_HW=y | 822 | CONFIG_CRYPTO_HW=y |
823 | # CONFIG_BINARY_PRINTF is not set | ||
556 | 824 | ||
557 | # | 825 | # |
558 | # Library routines | 826 | # Library routines |
559 | # | 827 | # |
560 | CONFIG_BITREVERSE=m | 828 | CONFIG_BITREVERSE=y |
829 | CONFIG_GENERIC_FIND_FIRST_BIT=y | ||
830 | CONFIG_GENERIC_IO=y | ||
561 | # CONFIG_CRC_CCITT is not set | 831 | # CONFIG_CRC_CCITT is not set |
562 | # CONFIG_CRC16 is not set | 832 | CONFIG_CRC16=y |
833 | # CONFIG_CRC_T10DIF is not set | ||
563 | # CONFIG_CRC_ITU_T is not set | 834 | # CONFIG_CRC_ITU_T is not set |
564 | CONFIG_CRC32=m | 835 | CONFIG_CRC32=y |
565 | # CONFIG_CRC7 is not set | 836 | # CONFIG_CRC7 is not set |
566 | # CONFIG_LIBCRC32C is not set | 837 | # CONFIG_LIBCRC32C is not set |
567 | CONFIG_PLIST=y | 838 | # CONFIG_CRC8 is not set |
568 | 839 | # CONFIG_XZ_DEC is not set | |
569 | # | 840 | # CONFIG_XZ_DEC_BCJ is not set |
570 | # SCSI device support | 841 | CONFIG_DQL=y |
571 | # | 842 | CONFIG_NLATTR=y |
572 | # CONFIG_RAID_ATTRS is not set | 843 | # CONFIG_AVERAGE is not set |
573 | # CONFIG_SCSI is not set | 844 | # CONFIG_CORDIC is not set |
574 | # CONFIG_SCSI_DMA is not set | ||
575 | # CONFIG_SCSI_NETLINK is not set | ||
576 | # CONFIG_MD is not set | ||
577 | # CONFIG_INPUT is not set | ||
578 | 845 | ||
579 | # | 846 | # |
580 | # Kernel hacking | 847 | # Kernel hacking |
581 | # | 848 | # |
582 | # CONFIG_PRINTK_TIME is not set | 849 | # CONFIG_PRINTK_TIME is not set |
850 | CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 | ||
583 | CONFIG_ENABLE_WARN_DEPRECATED=y | 851 | CONFIG_ENABLE_WARN_DEPRECATED=y |
584 | CONFIG_ENABLE_MUST_CHECK=y | 852 | CONFIG_ENABLE_MUST_CHECK=y |
853 | CONFIG_FRAME_WARN=1024 | ||
854 | # CONFIG_STRIP_ASM_SYMS is not set | ||
585 | # CONFIG_UNUSED_SYMBOLS is not set | 855 | # CONFIG_UNUSED_SYMBOLS is not set |
586 | # CONFIG_DEBUG_FS is not set | 856 | # CONFIG_DEBUG_FS is not set |
857 | # CONFIG_DEBUG_SECTION_MISMATCH is not set | ||
587 | CONFIG_DEBUG_KERNEL=y | 858 | CONFIG_DEBUG_KERNEL=y |
588 | # CONFIG_DEBUG_SHIRQ is not set | 859 | # CONFIG_DEBUG_SHIRQ is not set |
589 | CONFIG_DETECT_SOFTLOCKUP=y | 860 | # CONFIG_LOCKUP_DETECTOR is not set |
861 | # CONFIG_HARDLOCKUP_DETECTOR is not set | ||
862 | # CONFIG_DETECT_HUNG_TASK is not set | ||
590 | CONFIG_SCHED_DEBUG=y | 863 | CONFIG_SCHED_DEBUG=y |
591 | # CONFIG_SCHEDSTATS is not set | 864 | # CONFIG_SCHEDSTATS is not set |
592 | # CONFIG_TIMER_STATS is not set | 865 | # CONFIG_TIMER_STATS is not set |
866 | # CONFIG_DEBUG_OBJECTS is not set | ||
593 | # CONFIG_DEBUG_SLAB is not set | 867 | # CONFIG_DEBUG_SLAB is not set |
594 | # CONFIG_DEBUG_RT_MUTEXES is not set | 868 | # CONFIG_DEBUG_RT_MUTEXES is not set |
595 | # CONFIG_RT_MUTEX_TESTER is not set | 869 | # CONFIG_RT_MUTEX_TESTER is not set |
596 | # CONFIG_DEBUG_SPINLOCK is not set | 870 | # CONFIG_DEBUG_SPINLOCK is not set |
597 | # CONFIG_DEBUG_MUTEXES is not set | 871 | # CONFIG_DEBUG_MUTEXES is not set |
598 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 872 | # CONFIG_SPARSE_RCU_POINTER is not set |
873 | # CONFIG_DEBUG_ATOMIC_SLEEP is not set | ||
599 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 874 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
875 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
600 | # CONFIG_DEBUG_KOBJECT is not set | 876 | # CONFIG_DEBUG_KOBJECT is not set |
601 | CONFIG_DEBUG_BUGVERBOSE=y | 877 | CONFIG_DEBUG_BUGVERBOSE=y |
602 | CONFIG_DEBUG_INFO=y | 878 | CONFIG_DEBUG_INFO=y |
879 | # CONFIG_DEBUG_INFO_REDUCED is not set | ||
603 | # CONFIG_DEBUG_VM is not set | 880 | # CONFIG_DEBUG_VM is not set |
881 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
882 | CONFIG_DEBUG_MEMORY_INIT=y | ||
604 | # CONFIG_DEBUG_LIST is not set | 883 | # CONFIG_DEBUG_LIST is not set |
884 | # CONFIG_TEST_LIST_SORT is not set | ||
605 | # CONFIG_DEBUG_SG is not set | 885 | # CONFIG_DEBUG_SG is not set |
886 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
887 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
606 | CONFIG_FRAME_POINTER=y | 888 | CONFIG_FRAME_POINTER=y |
607 | CONFIG_FORCED_INLINING=y | ||
608 | # CONFIG_BOOT_PRINTK_DELAY is not set | 889 | # CONFIG_BOOT_PRINTK_DELAY is not set |
609 | # CONFIG_RCU_TORTURE_TEST is not set | 890 | # CONFIG_RCU_TORTURE_TEST is not set |
610 | # CONFIG_BACKTRACE_SELF_TEST is not set | 891 | # CONFIG_BACKTRACE_SELF_TEST is not set |
892 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
893 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
611 | # CONFIG_FAULT_INJECTION is not set | 894 | # CONFIG_FAULT_INJECTION is not set |
895 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
896 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
897 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
612 | # CONFIG_SAMPLES is not set | 898 | # CONFIG_SAMPLES is not set |
899 | # CONFIG_TEST_KSTRTOX is not set | ||
613 | # CONFIG_GPROF is not set | 900 | # CONFIG_GPROF is not set |
614 | # CONFIG_GCOV is not set | 901 | # CONFIG_GCOV is not set |
615 | # CONFIG_DEBUG_STACK_USAGE is not set | 902 | CONFIG_EARLY_PRINTK=y |
diff --git a/arch/um/drivers/chan.h b/arch/um/drivers/chan.h index 8df0fd9024dc..02b5a76e98d9 100644 --- a/arch/um/drivers/chan.h +++ b/arch/um/drivers/chan.h | |||
@@ -27,24 +27,24 @@ struct chan { | |||
27 | void *data; | 27 | void *data; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | extern void chan_interrupt(struct list_head *chans, struct delayed_work *task, | 30 | extern void chan_interrupt(struct line *line, |
31 | struct tty_struct *tty, int irq); | 31 | struct tty_struct *tty, int irq); |
32 | extern int parse_chan_pair(char *str, struct line *line, int device, | 32 | extern int parse_chan_pair(char *str, struct line *line, int device, |
33 | const struct chan_opts *opts, char **error_out); | 33 | const struct chan_opts *opts, char **error_out); |
34 | extern int write_chan(struct list_head *chans, const char *buf, int len, | 34 | extern int write_chan(struct chan *chan, const char *buf, int len, |
35 | int write_irq); | 35 | int write_irq); |
36 | extern int console_write_chan(struct list_head *chans, const char *buf, | 36 | extern int console_write_chan(struct chan *chan, const char *buf, |
37 | int len); | 37 | int len); |
38 | extern int console_open_chan(struct line *line, struct console *co); | 38 | extern int console_open_chan(struct line *line, struct console *co); |
39 | extern void deactivate_chan(struct list_head *chans, int irq); | 39 | extern void deactivate_chan(struct chan *chan, int irq); |
40 | extern void reactivate_chan(struct list_head *chans, int irq); | 40 | extern void reactivate_chan(struct chan *chan, int irq); |
41 | extern void chan_enable_winch(struct list_head *chans, struct tty_struct *tty); | 41 | extern void chan_enable_winch(struct chan *chan, struct tty_struct *tty); |
42 | extern int enable_chan(struct line *line); | 42 | extern int enable_chan(struct line *line); |
43 | extern void close_chan(struct list_head *chans, int delay_free_irq); | 43 | extern void close_chan(struct line *line); |
44 | extern int chan_window_size(struct list_head *chans, | 44 | extern int chan_window_size(struct line *line, |
45 | unsigned short *rows_out, | 45 | unsigned short *rows_out, |
46 | unsigned short *cols_out); | 46 | unsigned short *cols_out); |
47 | extern int chan_config_string(struct list_head *chans, char *str, int size, | 47 | extern int chan_config_string(struct line *line, char *str, int size, |
48 | char **error_out); | 48 | char **error_out); |
49 | 49 | ||
50 | #endif | 50 | #endif |
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index 420e2c800799..ca4c7ebfd0aa 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c | |||
@@ -140,18 +140,18 @@ static int open_chan(struct list_head *chans) | |||
140 | return err; | 140 | return err; |
141 | } | 141 | } |
142 | 142 | ||
143 | void chan_enable_winch(struct list_head *chans, struct tty_struct *tty) | 143 | void chan_enable_winch(struct chan *chan, struct tty_struct *tty) |
144 | { | 144 | { |
145 | struct list_head *ele; | 145 | if (chan && chan->primary && chan->ops->winch) |
146 | struct chan *chan; | 146 | register_winch(chan->fd, tty); |
147 | } | ||
147 | 148 | ||
148 | list_for_each(ele, chans) { | 149 | static void line_timer_cb(struct work_struct *work) |
149 | chan = list_entry(ele, struct chan, list); | 150 | { |
150 | if (chan->primary && chan->output && chan->ops->winch) { | 151 | struct line *line = container_of(work, struct line, task.work); |
151 | register_winch(chan->fd, tty); | 152 | |
152 | return; | 153 | if (!line->throttled) |
153 | } | 154 | chan_interrupt(line, line->tty, line->driver->read_irq); |
154 | } | ||
155 | } | 155 | } |
156 | 156 | ||
157 | int enable_chan(struct line *line) | 157 | int enable_chan(struct line *line) |
@@ -160,6 +160,8 @@ int enable_chan(struct line *line) | |||
160 | struct chan *chan; | 160 | struct chan *chan; |
161 | int err; | 161 | int err; |
162 | 162 | ||
163 | INIT_DELAYED_WORK(&line->task, line_timer_cb); | ||
164 | |||
163 | list_for_each(ele, &line->chan_list) { | 165 | list_for_each(ele, &line->chan_list) { |
164 | chan = list_entry(ele, struct chan, list); | 166 | chan = list_entry(ele, struct chan, list); |
165 | err = open_one_chan(chan); | 167 | err = open_one_chan(chan); |
@@ -183,7 +185,7 @@ int enable_chan(struct line *line) | |||
183 | return 0; | 185 | return 0; |
184 | 186 | ||
185 | out_close: | 187 | out_close: |
186 | close_chan(&line->chan_list, 0); | 188 | close_chan(line); |
187 | return err; | 189 | return err; |
188 | } | 190 | } |
189 | 191 | ||
@@ -244,7 +246,7 @@ static void close_one_chan(struct chan *chan, int delay_free_irq) | |||
244 | chan->fd = -1; | 246 | chan->fd = -1; |
245 | } | 247 | } |
246 | 248 | ||
247 | void close_chan(struct list_head *chans, int delay_free_irq) | 249 | void close_chan(struct line *line) |
248 | { | 250 | { |
249 | struct chan *chan; | 251 | struct chan *chan; |
250 | 252 | ||
@@ -253,77 +255,50 @@ void close_chan(struct list_head *chans, int delay_free_irq) | |||
253 | * state. Then, the first one opened will have the original state, | 255 | * state. Then, the first one opened will have the original state, |
254 | * so it must be the last closed. | 256 | * so it must be the last closed. |
255 | */ | 257 | */ |
256 | list_for_each_entry_reverse(chan, chans, list) { | 258 | list_for_each_entry_reverse(chan, &line->chan_list, list) { |
257 | close_one_chan(chan, delay_free_irq); | 259 | close_one_chan(chan, 0); |
258 | } | 260 | } |
259 | } | 261 | } |
260 | 262 | ||
261 | void deactivate_chan(struct list_head *chans, int irq) | 263 | void deactivate_chan(struct chan *chan, int irq) |
262 | { | 264 | { |
263 | struct list_head *ele; | 265 | if (chan && chan->enabled) |
264 | 266 | deactivate_fd(chan->fd, irq); | |
265 | struct chan *chan; | ||
266 | list_for_each(ele, chans) { | ||
267 | chan = list_entry(ele, struct chan, list); | ||
268 | |||
269 | if (chan->enabled && chan->input) | ||
270 | deactivate_fd(chan->fd, irq); | ||
271 | } | ||
272 | } | 267 | } |
273 | 268 | ||
274 | void reactivate_chan(struct list_head *chans, int irq) | 269 | void reactivate_chan(struct chan *chan, int irq) |
275 | { | 270 | { |
276 | struct list_head *ele; | 271 | if (chan && chan->enabled) |
277 | struct chan *chan; | 272 | reactivate_fd(chan->fd, irq); |
278 | |||
279 | list_for_each(ele, chans) { | ||
280 | chan = list_entry(ele, struct chan, list); | ||
281 | |||
282 | if (chan->enabled && chan->input) | ||
283 | reactivate_fd(chan->fd, irq); | ||
284 | } | ||
285 | } | 273 | } |
286 | 274 | ||
287 | int write_chan(struct list_head *chans, const char *buf, int len, | 275 | int write_chan(struct chan *chan, const char *buf, int len, |
288 | int write_irq) | 276 | int write_irq) |
289 | { | 277 | { |
290 | struct list_head *ele; | ||
291 | struct chan *chan = NULL; | ||
292 | int n, ret = 0; | 278 | int n, ret = 0; |
293 | 279 | ||
294 | if (len == 0) | 280 | if (len == 0 || !chan || !chan->ops->write) |
295 | return 0; | 281 | return 0; |
296 | 282 | ||
297 | list_for_each(ele, chans) { | 283 | n = chan->ops->write(chan->fd, buf, len, chan->data); |
298 | chan = list_entry(ele, struct chan, list); | 284 | if (chan->primary) { |
299 | if (!chan->output || (chan->ops->write == NULL)) | 285 | ret = n; |
300 | continue; | 286 | if ((ret == -EAGAIN) || ((ret >= 0) && (ret < len))) |
301 | 287 | reactivate_fd(chan->fd, write_irq); | |
302 | n = chan->ops->write(chan->fd, buf, len, chan->data); | ||
303 | if (chan->primary) { | ||
304 | ret = n; | ||
305 | if ((ret == -EAGAIN) || ((ret >= 0) && (ret < len))) | ||
306 | reactivate_fd(chan->fd, write_irq); | ||
307 | } | ||
308 | } | 288 | } |
309 | return ret; | 289 | return ret; |
310 | } | 290 | } |
311 | 291 | ||
312 | int console_write_chan(struct list_head *chans, const char *buf, int len) | 292 | int console_write_chan(struct chan *chan, const char *buf, int len) |
313 | { | 293 | { |
314 | struct list_head *ele; | ||
315 | struct chan *chan; | ||
316 | int n, ret = 0; | 294 | int n, ret = 0; |
317 | 295 | ||
318 | list_for_each(ele, chans) { | 296 | if (!chan || !chan->ops->console_write) |
319 | chan = list_entry(ele, struct chan, list); | 297 | return 0; |
320 | if (!chan->output || (chan->ops->console_write == NULL)) | ||
321 | continue; | ||
322 | 298 | ||
323 | n = chan->ops->console_write(chan->fd, buf, len); | 299 | n = chan->ops->console_write(chan->fd, buf, len); |
324 | if (chan->primary) | 300 | if (chan->primary) |
325 | ret = n; | 301 | ret = n; |
326 | } | ||
327 | return ret; | 302 | return ret; |
328 | } | 303 | } |
329 | 304 | ||
@@ -340,20 +315,24 @@ int console_open_chan(struct line *line, struct console *co) | |||
340 | return 0; | 315 | return 0; |
341 | } | 316 | } |
342 | 317 | ||
343 | int chan_window_size(struct list_head *chans, unsigned short *rows_out, | 318 | int chan_window_size(struct line *line, unsigned short *rows_out, |
344 | unsigned short *cols_out) | 319 | unsigned short *cols_out) |
345 | { | 320 | { |
346 | struct list_head *ele; | ||
347 | struct chan *chan; | 321 | struct chan *chan; |
348 | 322 | ||
349 | list_for_each(ele, chans) { | 323 | chan = line->chan_in; |
350 | chan = list_entry(ele, struct chan, list); | 324 | if (chan && chan->primary) { |
351 | if (chan->primary) { | 325 | if (chan->ops->window_size == NULL) |
352 | if (chan->ops->window_size == NULL) | 326 | return 0; |
353 | return 0; | 327 | return chan->ops->window_size(chan->fd, chan->data, |
354 | return chan->ops->window_size(chan->fd, chan->data, | 328 | rows_out, cols_out); |
355 | rows_out, cols_out); | 329 | } |
356 | } | 330 | chan = line->chan_out; |
331 | if (chan && chan->primary) { | ||
332 | if (chan->ops->window_size == NULL) | ||
333 | return 0; | ||
334 | return chan->ops->window_size(chan->fd, chan->data, | ||
335 | rows_out, cols_out); | ||
357 | } | 336 | } |
358 | return 0; | 337 | return 0; |
359 | } | 338 | } |
@@ -429,21 +408,15 @@ static int chan_pair_config_string(struct chan *in, struct chan *out, | |||
429 | return n; | 408 | return n; |
430 | } | 409 | } |
431 | 410 | ||
432 | int chan_config_string(struct list_head *chans, char *str, int size, | 411 | int chan_config_string(struct line *line, char *str, int size, |
433 | char **error_out) | 412 | char **error_out) |
434 | { | 413 | { |
435 | struct list_head *ele; | 414 | struct chan *in = line->chan_in, *out = line->chan_out; |
436 | struct chan *chan, *in = NULL, *out = NULL; | ||
437 | 415 | ||
438 | list_for_each(ele, chans) { | 416 | if (in && !in->primary) |
439 | chan = list_entry(ele, struct chan, list); | 417 | in = NULL; |
440 | if (!chan->primary) | 418 | if (out && !out->primary) |
441 | continue; | 419 | out = NULL; |
442 | if (chan->input) | ||
443 | in = chan; | ||
444 | if (chan->output) | ||
445 | out = chan; | ||
446 | } | ||
447 | 420 | ||
448 | return chan_pair_config_string(in, out, str, size, error_out); | 421 | return chan_pair_config_string(in, out, str, size, error_out); |
449 | } | 422 | } |
@@ -547,10 +520,14 @@ int parse_chan_pair(char *str, struct line *line, int device, | |||
547 | char *in, *out; | 520 | char *in, *out; |
548 | 521 | ||
549 | if (!list_empty(chans)) { | 522 | if (!list_empty(chans)) { |
523 | line->chan_in = line->chan_out = NULL; | ||
550 | free_chan(chans); | 524 | free_chan(chans); |
551 | INIT_LIST_HEAD(chans); | 525 | INIT_LIST_HEAD(chans); |
552 | } | 526 | } |
553 | 527 | ||
528 | if (!str) | ||
529 | return 0; | ||
530 | |||
554 | out = strchr(str, ','); | 531 | out = strchr(str, ','); |
555 | if (out != NULL) { | 532 | if (out != NULL) { |
556 | in = str; | 533 | in = str; |
@@ -562,6 +539,7 @@ int parse_chan_pair(char *str, struct line *line, int device, | |||
562 | 539 | ||
563 | new->input = 1; | 540 | new->input = 1; |
564 | list_add(&new->list, chans); | 541 | list_add(&new->list, chans); |
542 | line->chan_in = new; | ||
565 | 543 | ||
566 | new = parse_chan(line, out, device, opts, error_out); | 544 | new = parse_chan(line, out, device, opts, error_out); |
567 | if (new == NULL) | 545 | if (new == NULL) |
@@ -569,6 +547,7 @@ int parse_chan_pair(char *str, struct line *line, int device, | |||
569 | 547 | ||
570 | list_add(&new->list, chans); | 548 | list_add(&new->list, chans); |
571 | new->output = 1; | 549 | new->output = 1; |
550 | line->chan_out = new; | ||
572 | } | 551 | } |
573 | else { | 552 | else { |
574 | new = parse_chan(line, str, device, opts, error_out); | 553 | new = parse_chan(line, str, device, opts, error_out); |
@@ -578,43 +557,42 @@ int parse_chan_pair(char *str, struct line *line, int device, | |||
578 | list_add(&new->list, chans); | 557 | list_add(&new->list, chans); |
579 | new->input = 1; | 558 | new->input = 1; |
580 | new->output = 1; | 559 | new->output = 1; |
560 | line->chan_in = line->chan_out = new; | ||
581 | } | 561 | } |
582 | return 0; | 562 | return 0; |
583 | } | 563 | } |
584 | 564 | ||
585 | void chan_interrupt(struct list_head *chans, struct delayed_work *task, | 565 | void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) |
586 | struct tty_struct *tty, int irq) | ||
587 | { | 566 | { |
588 | struct list_head *ele, *next; | 567 | struct chan *chan = line->chan_in; |
589 | struct chan *chan; | ||
590 | int err; | 568 | int err; |
591 | char c; | 569 | char c; |
592 | 570 | ||
593 | list_for_each_safe(ele, next, chans) { | 571 | if (!chan || !chan->ops->read) |
594 | chan = list_entry(ele, struct chan, list); | 572 | goto out; |
595 | if (!chan->input || (chan->ops->read == NULL)) | 573 | |
596 | continue; | 574 | do { |
597 | do { | 575 | if (tty && !tty_buffer_request_room(tty, 1)) { |
598 | if (tty && !tty_buffer_request_room(tty, 1)) { | 576 | schedule_delayed_work(&line->task, 1); |
599 | schedule_delayed_work(task, 1); | 577 | goto out; |
600 | goto out; | ||
601 | } | ||
602 | err = chan->ops->read(chan->fd, &c, chan->data); | ||
603 | if (err > 0) | ||
604 | tty_receive_char(tty, c); | ||
605 | } while (err > 0); | ||
606 | |||
607 | if (err == 0) | ||
608 | reactivate_fd(chan->fd, irq); | ||
609 | if (err == -EIO) { | ||
610 | if (chan->primary) { | ||
611 | if (tty != NULL) | ||
612 | tty_hangup(tty); | ||
613 | close_chan(chans, 1); | ||
614 | return; | ||
615 | } | ||
616 | else close_one_chan(chan, 1); | ||
617 | } | 578 | } |
579 | err = chan->ops->read(chan->fd, &c, chan->data); | ||
580 | if (err > 0) | ||
581 | tty_receive_char(tty, c); | ||
582 | } while (err > 0); | ||
583 | |||
584 | if (err == 0) | ||
585 | reactivate_fd(chan->fd, irq); | ||
586 | if (err == -EIO) { | ||
587 | if (chan->primary) { | ||
588 | if (tty != NULL) | ||
589 | tty_hangup(tty); | ||
590 | if (line->chan_out != chan) | ||
591 | close_one_chan(line->chan_out, 1); | ||
592 | } | ||
593 | close_one_chan(chan, 1); | ||
594 | if (chan->primary) | ||
595 | return; | ||
618 | } | 596 | } |
619 | out: | 597 | out: |
620 | if (tty) | 598 | if (tty) |
diff --git a/arch/um/drivers/chan_user.h b/arch/um/drivers/chan_user.h index 9b9ced85b703..6257b7a6e1af 100644 --- a/arch/um/drivers/chan_user.h +++ b/arch/um/drivers/chan_user.h | |||
@@ -14,8 +14,6 @@ struct chan_opts { | |||
14 | const int raw; | 14 | const int raw; |
15 | }; | 15 | }; |
16 | 16 | ||
17 | enum chan_init_pri { INIT_STATIC, INIT_ALL, INIT_ONE }; | ||
18 | |||
19 | struct chan_ops { | 17 | struct chan_ops { |
20 | char *type; | 18 | char *type; |
21 | void *(*init)(char *, int, const struct chan_opts *); | 19 | void *(*init)(char *, int, const struct chan_opts *); |
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index c1cf2206b84b..4ab0d9c0911c 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -21,19 +21,10 @@ static irqreturn_t line_interrupt(int irq, void *data) | |||
21 | struct line *line = chan->line; | 21 | struct line *line = chan->line; |
22 | 22 | ||
23 | if (line) | 23 | if (line) |
24 | chan_interrupt(&line->chan_list, &line->task, line->tty, irq); | 24 | chan_interrupt(line, line->tty, irq); |
25 | return IRQ_HANDLED; | 25 | return IRQ_HANDLED; |
26 | } | 26 | } |
27 | 27 | ||
28 | static void line_timer_cb(struct work_struct *work) | ||
29 | { | ||
30 | struct line *line = container_of(work, struct line, task.work); | ||
31 | |||
32 | if (!line->throttled) | ||
33 | chan_interrupt(&line->chan_list, &line->task, line->tty, | ||
34 | line->driver->read_irq); | ||
35 | } | ||
36 | |||
37 | /* | 28 | /* |
38 | * Returns the free space inside the ring buffer of this line. | 29 | * Returns the free space inside the ring buffer of this line. |
39 | * | 30 | * |
@@ -145,7 +136,7 @@ static int flush_buffer(struct line *line) | |||
145 | /* line->buffer + LINE_BUFSIZE is the end of the buffer! */ | 136 | /* line->buffer + LINE_BUFSIZE is the end of the buffer! */ |
146 | count = line->buffer + LINE_BUFSIZE - line->head; | 137 | count = line->buffer + LINE_BUFSIZE - line->head; |
147 | 138 | ||
148 | n = write_chan(&line->chan_list, line->head, count, | 139 | n = write_chan(line->chan_out, line->head, count, |
149 | line->driver->write_irq); | 140 | line->driver->write_irq); |
150 | if (n < 0) | 141 | if (n < 0) |
151 | return n; | 142 | return n; |
@@ -162,7 +153,7 @@ static int flush_buffer(struct line *line) | |||
162 | } | 153 | } |
163 | 154 | ||
164 | count = line->tail - line->head; | 155 | count = line->tail - line->head; |
165 | n = write_chan(&line->chan_list, line->head, count, | 156 | n = write_chan(line->chan_out, line->head, count, |
166 | line->driver->write_irq); | 157 | line->driver->write_irq); |
167 | 158 | ||
168 | if (n < 0) | 159 | if (n < 0) |
@@ -206,7 +197,7 @@ int line_write(struct tty_struct *tty, const unsigned char *buf, int len) | |||
206 | if (line->head != line->tail) | 197 | if (line->head != line->tail) |
207 | ret = buffer_data(line, buf, len); | 198 | ret = buffer_data(line, buf, len); |
208 | else { | 199 | else { |
209 | n = write_chan(&line->chan_list, buf, len, | 200 | n = write_chan(line->chan_out, buf, len, |
210 | line->driver->write_irq); | 201 | line->driver->write_irq); |
211 | if (n < 0) { | 202 | if (n < 0) { |
212 | ret = n; | 203 | ret = n; |
@@ -318,7 +309,7 @@ void line_throttle(struct tty_struct *tty) | |||
318 | { | 309 | { |
319 | struct line *line = tty->driver_data; | 310 | struct line *line = tty->driver_data; |
320 | 311 | ||
321 | deactivate_chan(&line->chan_list, line->driver->read_irq); | 312 | deactivate_chan(line->chan_in, line->driver->read_irq); |
322 | line->throttled = 1; | 313 | line->throttled = 1; |
323 | } | 314 | } |
324 | 315 | ||
@@ -327,8 +318,7 @@ void line_unthrottle(struct tty_struct *tty) | |||
327 | struct line *line = tty->driver_data; | 318 | struct line *line = tty->driver_data; |
328 | 319 | ||
329 | line->throttled = 0; | 320 | line->throttled = 0; |
330 | chan_interrupt(&line->chan_list, &line->task, tty, | 321 | chan_interrupt(line, tty, line->driver->read_irq); |
331 | line->driver->read_irq); | ||
332 | 322 | ||
333 | /* | 323 | /* |
334 | * Maybe there is enough stuff pending that calling the interrupt | 324 | * Maybe there is enough stuff pending that calling the interrupt |
@@ -336,7 +326,7 @@ void line_unthrottle(struct tty_struct *tty) | |||
336 | * again and we shouldn't turn the interrupt back on. | 326 | * again and we shouldn't turn the interrupt back on. |
337 | */ | 327 | */ |
338 | if (!line->throttled) | 328 | if (!line->throttled) |
339 | reactivate_chan(&line->chan_list, line->driver->read_irq); | 329 | reactivate_chan(line->chan_in, line->driver->read_irq); |
340 | } | 330 | } |
341 | 331 | ||
342 | static irqreturn_t line_write_interrupt(int irq, void *data) | 332 | static irqreturn_t line_write_interrupt(int irq, void *data) |
@@ -347,13 +337,14 @@ static irqreturn_t line_write_interrupt(int irq, void *data) | |||
347 | int err; | 337 | int err; |
348 | 338 | ||
349 | /* | 339 | /* |
350 | * Interrupts are disabled here because we registered the interrupt with | 340 | * Interrupts are disabled here because genirq keep irqs disabled when |
351 | * IRQF_DISABLED (see line_setup_irq). | 341 | * calling the action handler. |
352 | */ | 342 | */ |
353 | 343 | ||
354 | spin_lock(&line->lock); | 344 | spin_lock(&line->lock); |
355 | err = flush_buffer(line); | 345 | err = flush_buffer(line); |
356 | if (err == 0) { | 346 | if (err == 0) { |
347 | spin_unlock(&line->lock); | ||
357 | return IRQ_NONE; | 348 | return IRQ_NONE; |
358 | } else if (err < 0) { | 349 | } else if (err < 0) { |
359 | line->head = line->buffer; | 350 | line->head = line->buffer; |
@@ -371,7 +362,7 @@ static irqreturn_t line_write_interrupt(int irq, void *data) | |||
371 | int line_setup_irq(int fd, int input, int output, struct line *line, void *data) | 362 | int line_setup_irq(int fd, int input, int output, struct line *line, void *data) |
372 | { | 363 | { |
373 | const struct line_driver *driver = line->driver; | 364 | const struct line_driver *driver = line->driver; |
374 | int err = 0, flags = IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM; | 365 | int err = 0, flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM; |
375 | 366 | ||
376 | if (input) | 367 | if (input) |
377 | err = um_request_irq(driver->read_irq, fd, IRQ_READ, | 368 | err = um_request_irq(driver->read_irq, fd, IRQ_READ, |
@@ -383,7 +374,6 @@ int line_setup_irq(int fd, int input, int output, struct line *line, void *data) | |||
383 | err = um_request_irq(driver->write_irq, fd, IRQ_WRITE, | 374 | err = um_request_irq(driver->write_irq, fd, IRQ_WRITE, |
384 | line_write_interrupt, flags, | 375 | line_write_interrupt, flags, |
385 | driver->write_irq_name, data); | 376 | driver->write_irq_name, data); |
386 | line->have_irq = 1; | ||
387 | return err; | 377 | return err; |
388 | } | 378 | } |
389 | 379 | ||
@@ -409,7 +399,7 @@ int line_open(struct line *lines, struct tty_struct *tty) | |||
409 | struct line *line = &lines[tty->index]; | 399 | struct line *line = &lines[tty->index]; |
410 | int err = -ENODEV; | 400 | int err = -ENODEV; |
411 | 401 | ||
412 | spin_lock(&line->count_lock); | 402 | mutex_lock(&line->count_lock); |
413 | if (!line->valid) | 403 | if (!line->valid) |
414 | goto out_unlock; | 404 | goto out_unlock; |
415 | 405 | ||
@@ -421,25 +411,19 @@ int line_open(struct line *lines, struct tty_struct *tty) | |||
421 | tty->driver_data = line; | 411 | tty->driver_data = line; |
422 | line->tty = tty; | 412 | line->tty = tty; |
423 | 413 | ||
424 | spin_unlock(&line->count_lock); | ||
425 | err = enable_chan(line); | 414 | err = enable_chan(line); |
426 | if (err) /* line_close() will be called by our caller */ | 415 | if (err) /* line_close() will be called by our caller */ |
427 | return err; | 416 | goto out_unlock; |
428 | |||
429 | INIT_DELAYED_WORK(&line->task, line_timer_cb); | ||
430 | 417 | ||
431 | if (!line->sigio) { | 418 | if (!line->sigio) { |
432 | chan_enable_winch(&line->chan_list, tty); | 419 | chan_enable_winch(line->chan_out, tty); |
433 | line->sigio = 1; | 420 | line->sigio = 1; |
434 | } | 421 | } |
435 | 422 | ||
436 | chan_window_size(&line->chan_list, &tty->winsize.ws_row, | 423 | chan_window_size(line, &tty->winsize.ws_row, |
437 | &tty->winsize.ws_col); | 424 | &tty->winsize.ws_col); |
438 | |||
439 | return 0; | ||
440 | |||
441 | out_unlock: | 425 | out_unlock: |
442 | spin_unlock(&line->count_lock); | 426 | mutex_unlock(&line->count_lock); |
443 | return err; | 427 | return err; |
444 | } | 428 | } |
445 | 429 | ||
@@ -459,7 +443,7 @@ void line_close(struct tty_struct *tty, struct file * filp) | |||
459 | /* We ignore the error anyway! */ | 443 | /* We ignore the error anyway! */ |
460 | flush_buffer(line); | 444 | flush_buffer(line); |
461 | 445 | ||
462 | spin_lock(&line->count_lock); | 446 | mutex_lock(&line->count_lock); |
463 | BUG_ON(!line->valid); | 447 | BUG_ON(!line->valid); |
464 | 448 | ||
465 | if (--line->count) | 449 | if (--line->count) |
@@ -468,17 +452,13 @@ void line_close(struct tty_struct *tty, struct file * filp) | |||
468 | line->tty = NULL; | 452 | line->tty = NULL; |
469 | tty->driver_data = NULL; | 453 | tty->driver_data = NULL; |
470 | 454 | ||
471 | spin_unlock(&line->count_lock); | ||
472 | |||
473 | if (line->sigio) { | 455 | if (line->sigio) { |
474 | unregister_winch(tty); | 456 | unregister_winch(tty); |
475 | line->sigio = 0; | 457 | line->sigio = 0; |
476 | } | 458 | } |
477 | 459 | ||
478 | return; | ||
479 | |||
480 | out_unlock: | 460 | out_unlock: |
481 | spin_unlock(&line->count_lock); | 461 | mutex_unlock(&line->count_lock); |
482 | } | 462 | } |
483 | 463 | ||
484 | void close_lines(struct line *lines, int nlines) | 464 | void close_lines(struct line *lines, int nlines) |
@@ -486,34 +466,60 @@ void close_lines(struct line *lines, int nlines) | |||
486 | int i; | 466 | int i; |
487 | 467 | ||
488 | for(i = 0; i < nlines; i++) | 468 | for(i = 0; i < nlines; i++) |
489 | close_chan(&lines[i].chan_list, 0); | 469 | close_chan(&lines[i]); |
490 | } | 470 | } |
491 | 471 | ||
492 | static int setup_one_line(struct line *lines, int n, char *init, int init_prio, | 472 | int setup_one_line(struct line *lines, int n, char *init, |
493 | char **error_out) | 473 | const struct chan_opts *opts, char **error_out) |
494 | { | 474 | { |
495 | struct line *line = &lines[n]; | 475 | struct line *line = &lines[n]; |
476 | struct tty_driver *driver = line->driver->driver; | ||
496 | int err = -EINVAL; | 477 | int err = -EINVAL; |
497 | 478 | ||
498 | spin_lock(&line->count_lock); | 479 | mutex_lock(&line->count_lock); |
499 | 480 | ||
500 | if (line->count) { | 481 | if (line->count) { |
501 | *error_out = "Device is already open"; | 482 | *error_out = "Device is already open"; |
502 | goto out; | 483 | goto out; |
503 | } | 484 | } |
504 | 485 | ||
505 | if (line->init_pri <= init_prio) { | 486 | if (!strcmp(init, "none")) { |
506 | line->init_pri = init_prio; | 487 | if (line->valid) { |
507 | if (!strcmp(init, "none")) | 488 | line->valid = 0; |
489 | kfree(line->init_str); | ||
490 | tty_unregister_device(driver, n); | ||
491 | parse_chan_pair(NULL, line, n, opts, error_out); | ||
492 | err = 0; | ||
493 | } | ||
494 | } else { | ||
495 | char *new = kstrdup(init, GFP_KERNEL); | ||
496 | if (!new) { | ||
497 | *error_out = "Failed to allocate memory"; | ||
498 | return -ENOMEM; | ||
499 | } | ||
500 | if (line->valid) { | ||
501 | tty_unregister_device(driver, n); | ||
502 | kfree(line->init_str); | ||
503 | } | ||
504 | line->init_str = new; | ||
505 | line->valid = 1; | ||
506 | err = parse_chan_pair(new, line, n, opts, error_out); | ||
507 | if (!err) { | ||
508 | struct device *d = tty_register_device(driver, n, NULL); | ||
509 | if (IS_ERR(d)) { | ||
510 | *error_out = "Failed to register device"; | ||
511 | err = PTR_ERR(d); | ||
512 | parse_chan_pair(NULL, line, n, opts, error_out); | ||
513 | } | ||
514 | } | ||
515 | if (err) { | ||
516 | line->init_str = NULL; | ||
508 | line->valid = 0; | 517 | line->valid = 0; |
509 | else { | 518 | kfree(new); |
510 | line->init_str = init; | ||
511 | line->valid = 1; | ||
512 | } | 519 | } |
513 | } | 520 | } |
514 | err = 0; | ||
515 | out: | 521 | out: |
516 | spin_unlock(&line->count_lock); | 522 | mutex_unlock(&line->count_lock); |
517 | return err; | 523 | return err; |
518 | } | 524 | } |
519 | 525 | ||
@@ -524,54 +530,43 @@ out: | |||
524 | * @error_out is an error string in the case of failure; | 530 | * @error_out is an error string in the case of failure; |
525 | */ | 531 | */ |
526 | 532 | ||
527 | int line_setup(struct line *lines, unsigned int num, char *init, | 533 | int line_setup(char **conf, unsigned int num, char **def, |
528 | char **error_out) | 534 | char *init, char *name) |
529 | { | 535 | { |
530 | int i, n, err; | 536 | char *error; |
531 | char *end; | ||
532 | 537 | ||
533 | if (*init == '=') { | 538 | if (*init == '=') { |
534 | /* | 539 | /* |
535 | * We said con=/ssl= instead of con#=, so we are configuring all | 540 | * We said con=/ssl= instead of con#=, so we are configuring all |
536 | * consoles at once. | 541 | * consoles at once. |
537 | */ | 542 | */ |
538 | n = -1; | 543 | *def = init + 1; |
539 | } | 544 | } else { |
540 | else { | 545 | char *end; |
541 | n = simple_strtoul(init, &end, 0); | 546 | unsigned n = simple_strtoul(init, &end, 0); |
547 | |||
542 | if (*end != '=') { | 548 | if (*end != '=') { |
543 | *error_out = "Couldn't parse device number"; | 549 | error = "Couldn't parse device number"; |
544 | return -EINVAL; | 550 | goto out; |
545 | } | 551 | } |
546 | init = end; | 552 | if (n >= num) { |
547 | } | 553 | error = "Device number out of range"; |
548 | init++; | 554 | goto out; |
549 | |||
550 | if (n >= (signed int) num) { | ||
551 | *error_out = "Device number out of range"; | ||
552 | return -EINVAL; | ||
553 | } | ||
554 | else if (n >= 0) { | ||
555 | err = setup_one_line(lines, n, init, INIT_ONE, error_out); | ||
556 | if (err) | ||
557 | return err; | ||
558 | } | ||
559 | else { | ||
560 | for(i = 0; i < num; i++) { | ||
561 | err = setup_one_line(lines, i, init, INIT_ALL, | ||
562 | error_out); | ||
563 | if (err) | ||
564 | return err; | ||
565 | } | 555 | } |
556 | conf[n] = end + 1; | ||
566 | } | 557 | } |
567 | return n == -1 ? num : n; | 558 | return 0; |
559 | |||
560 | out: | ||
561 | printk(KERN_ERR "Failed to set up %s with " | ||
562 | "configuration string \"%s\" : %s\n", name, init, error); | ||
563 | return -EINVAL; | ||
568 | } | 564 | } |
569 | 565 | ||
570 | int line_config(struct line *lines, unsigned int num, char *str, | 566 | int line_config(struct line *lines, unsigned int num, char *str, |
571 | const struct chan_opts *opts, char **error_out) | 567 | const struct chan_opts *opts, char **error_out) |
572 | { | 568 | { |
573 | struct line *line; | 569 | char *end; |
574 | char *new; | ||
575 | int n; | 570 | int n; |
576 | 571 | ||
577 | if (*str == '=') { | 572 | if (*str == '=') { |
@@ -579,17 +574,17 @@ int line_config(struct line *lines, unsigned int num, char *str, | |||
579 | return -EINVAL; | 574 | return -EINVAL; |
580 | } | 575 | } |
581 | 576 | ||
582 | new = kstrdup(str, GFP_KERNEL); | 577 | n = simple_strtoul(str, &end, 0); |
583 | if (new == NULL) { | 578 | if (*end++ != '=') { |
584 | *error_out = "Failed to allocate memory"; | 579 | *error_out = "Couldn't parse device number"; |
585 | return -ENOMEM; | 580 | return -EINVAL; |
581 | } | ||
582 | if (n >= num) { | ||
583 | *error_out = "Device number out of range"; | ||
584 | return -EINVAL; | ||
586 | } | 585 | } |
587 | n = line_setup(lines, num, new, error_out); | ||
588 | if (n < 0) | ||
589 | return n; | ||
590 | 586 | ||
591 | line = &lines[n]; | 587 | return setup_one_line(lines, n, end, opts, error_out); |
592 | return parse_chan_pair(line->init_str, line, n, opts, error_out); | ||
593 | } | 588 | } |
594 | 589 | ||
595 | int line_get_config(char *name, struct line *lines, unsigned int num, char *str, | 590 | int line_get_config(char *name, struct line *lines, unsigned int num, char *str, |
@@ -612,13 +607,13 @@ int line_get_config(char *name, struct line *lines, unsigned int num, char *str, | |||
612 | 607 | ||
613 | line = &lines[dev]; | 608 | line = &lines[dev]; |
614 | 609 | ||
615 | spin_lock(&line->count_lock); | 610 | mutex_lock(&line->count_lock); |
616 | if (!line->valid) | 611 | if (!line->valid) |
617 | CONFIG_CHUNK(str, size, n, "none", 1); | 612 | CONFIG_CHUNK(str, size, n, "none", 1); |
618 | else if (line->tty == NULL) | 613 | else if (line->tty == NULL) |
619 | CONFIG_CHUNK(str, size, n, line->init_str, 1); | 614 | CONFIG_CHUNK(str, size, n, line->init_str, 1); |
620 | else n = chan_config_string(&line->chan_list, str, size, error_out); | 615 | else n = chan_config_string(line, str, size, error_out); |
621 | spin_unlock(&line->count_lock); | 616 | mutex_unlock(&line->count_lock); |
622 | 617 | ||
623 | return n; | 618 | return n; |
624 | } | 619 | } |
@@ -640,25 +635,23 @@ int line_id(char **str, int *start_out, int *end_out) | |||
640 | 635 | ||
641 | int line_remove(struct line *lines, unsigned int num, int n, char **error_out) | 636 | int line_remove(struct line *lines, unsigned int num, int n, char **error_out) |
642 | { | 637 | { |
643 | int err; | 638 | if (n >= num) { |
644 | char config[sizeof("conxxxx=none\0")]; | 639 | *error_out = "Device number out of range"; |
645 | 640 | return -EINVAL; | |
646 | sprintf(config, "%d=none", n); | 641 | } |
647 | err = line_setup(lines, num, config, error_out); | 642 | return setup_one_line(lines, n, "none", NULL, error_out); |
648 | if (err >= 0) | ||
649 | err = 0; | ||
650 | return err; | ||
651 | } | 643 | } |
652 | 644 | ||
653 | struct tty_driver *register_lines(struct line_driver *line_driver, | 645 | int register_lines(struct line_driver *line_driver, |
654 | const struct tty_operations *ops, | 646 | const struct tty_operations *ops, |
655 | struct line *lines, int nlines) | 647 | struct line *lines, int nlines) |
656 | { | 648 | { |
657 | int i; | ||
658 | struct tty_driver *driver = alloc_tty_driver(nlines); | 649 | struct tty_driver *driver = alloc_tty_driver(nlines); |
650 | int err; | ||
651 | int i; | ||
659 | 652 | ||
660 | if (!driver) | 653 | if (!driver) |
661 | return NULL; | 654 | return -ENOMEM; |
662 | 655 | ||
663 | driver->driver_name = line_driver->name; | 656 | driver->driver_name = line_driver->name; |
664 | driver->name = line_driver->device_name; | 657 | driver->name = line_driver->device_name; |
@@ -666,54 +659,33 @@ struct tty_driver *register_lines(struct line_driver *line_driver, | |||
666 | driver->minor_start = line_driver->minor_start; | 659 | driver->minor_start = line_driver->minor_start; |
667 | driver->type = line_driver->type; | 660 | driver->type = line_driver->type; |
668 | driver->subtype = line_driver->subtype; | 661 | driver->subtype = line_driver->subtype; |
669 | driver->flags = TTY_DRIVER_REAL_RAW; | 662 | driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; |
670 | driver->init_termios = tty_std_termios; | 663 | driver->init_termios = tty_std_termios; |
664 | |||
665 | for (i = 0; i < nlines; i++) { | ||
666 | spin_lock_init(&lines[i].lock); | ||
667 | mutex_init(&lines[i].count_lock); | ||
668 | lines[i].driver = line_driver; | ||
669 | INIT_LIST_HEAD(&lines[i].chan_list); | ||
670 | } | ||
671 | tty_set_operations(driver, ops); | 671 | tty_set_operations(driver, ops); |
672 | 672 | ||
673 | if (tty_register_driver(driver)) { | 673 | err = tty_register_driver(driver); |
674 | if (err) { | ||
674 | printk(KERN_ERR "register_lines : can't register %s driver\n", | 675 | printk(KERN_ERR "register_lines : can't register %s driver\n", |
675 | line_driver->name); | 676 | line_driver->name); |
676 | put_tty_driver(driver); | 677 | put_tty_driver(driver); |
677 | return NULL; | 678 | return err; |
678 | } | ||
679 | |||
680 | for(i = 0; i < nlines; i++) { | ||
681 | if (!lines[i].valid) | ||
682 | tty_unregister_device(driver, i); | ||
683 | } | 679 | } |
684 | 680 | ||
681 | line_driver->driver = driver; | ||
685 | mconsole_register_dev(&line_driver->mc); | 682 | mconsole_register_dev(&line_driver->mc); |
686 | return driver; | 683 | return 0; |
687 | } | 684 | } |
688 | 685 | ||
689 | static DEFINE_SPINLOCK(winch_handler_lock); | 686 | static DEFINE_SPINLOCK(winch_handler_lock); |
690 | static LIST_HEAD(winch_handlers); | 687 | static LIST_HEAD(winch_handlers); |
691 | 688 | ||
692 | void lines_init(struct line *lines, int nlines, struct chan_opts *opts) | ||
693 | { | ||
694 | struct line *line; | ||
695 | char *error; | ||
696 | int i; | ||
697 | |||
698 | for(i = 0; i < nlines; i++) { | ||
699 | line = &lines[i]; | ||
700 | INIT_LIST_HEAD(&line->chan_list); | ||
701 | |||
702 | if (line->init_str == NULL) | ||
703 | continue; | ||
704 | |||
705 | line->init_str = kstrdup(line->init_str, GFP_KERNEL); | ||
706 | if (line->init_str == NULL) | ||
707 | printk(KERN_ERR "lines_init - kstrdup returned NULL\n"); | ||
708 | |||
709 | if (parse_chan_pair(line->init_str, line, i, opts, &error)) { | ||
710 | printk(KERN_ERR "parse_chan_pair failed for " | ||
711 | "device %d : %s\n", i, error); | ||
712 | line->valid = 0; | ||
713 | } | ||
714 | } | ||
715 | } | ||
716 | |||
717 | struct winch { | 689 | struct winch { |
718 | struct list_head list; | 690 | struct list_head list; |
719 | int fd; | 691 | int fd; |
@@ -777,7 +749,7 @@ static irqreturn_t winch_interrupt(int irq, void *data) | |||
777 | if (tty != NULL) { | 749 | if (tty != NULL) { |
778 | line = tty->driver_data; | 750 | line = tty->driver_data; |
779 | if (line != NULL) { | 751 | if (line != NULL) { |
780 | chan_window_size(&line->chan_list, &tty->winsize.ws_row, | 752 | chan_window_size(line, &tty->winsize.ws_row, |
781 | &tty->winsize.ws_col); | 753 | &tty->winsize.ws_col); |
782 | kill_pgrp(tty->pgrp, SIGWINCH, 1); | 754 | kill_pgrp(tty->pgrp, SIGWINCH, 1); |
783 | } | 755 | } |
@@ -807,7 +779,7 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_struct *tty, | |||
807 | .stack = stack }); | 779 | .stack = stack }); |
808 | 780 | ||
809 | if (um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt, | 781 | if (um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt, |
810 | IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | 782 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, |
811 | "winch", winch) < 0) { | 783 | "winch", winch) < 0) { |
812 | printk(KERN_ERR "register_winch_irq - failed to register " | 784 | printk(KERN_ERR "register_winch_irq - failed to register " |
813 | "IRQ\n"); | 785 | "IRQ\n"); |
diff --git a/arch/um/drivers/line.h b/arch/um/drivers/line.h index 63df3ca02ac2..0a1834719dba 100644 --- a/arch/um/drivers/line.h +++ b/arch/um/drivers/line.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include "chan_user.h" | 15 | #include "chan_user.h" |
16 | #include "mconsole_kern.h" | 16 | #include "mconsole_kern.h" |
17 | 17 | ||
18 | /* There's only one modifiable field in this - .mc.list */ | 18 | /* There's only two modifiable fields in this - .mc.list and .driver */ |
19 | struct line_driver { | 19 | struct line_driver { |
20 | const char *name; | 20 | const char *name; |
21 | const char *device_name; | 21 | const char *device_name; |
@@ -28,17 +28,18 @@ struct line_driver { | |||
28 | const int write_irq; | 28 | const int write_irq; |
29 | const char *write_irq_name; | 29 | const char *write_irq_name; |
30 | struct mc_device mc; | 30 | struct mc_device mc; |
31 | struct tty_driver *driver; | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | struct line { | 34 | struct line { |
34 | struct tty_struct *tty; | 35 | struct tty_struct *tty; |
35 | spinlock_t count_lock; | 36 | struct mutex count_lock; |
36 | unsigned long count; | 37 | unsigned long count; |
37 | int valid; | 38 | int valid; |
38 | 39 | ||
39 | char *init_str; | 40 | char *init_str; |
40 | int init_pri; | ||
41 | struct list_head chan_list; | 41 | struct list_head chan_list; |
42 | struct chan *chan_in, *chan_out; | ||
42 | 43 | ||
43 | /*This lock is actually, mostly, local to*/ | 44 | /*This lock is actually, mostly, local to*/ |
44 | spinlock_t lock; | 45 | spinlock_t lock; |
@@ -55,21 +56,12 @@ struct line { | |||
55 | int sigio; | 56 | int sigio; |
56 | struct delayed_work task; | 57 | struct delayed_work task; |
57 | const struct line_driver *driver; | 58 | const struct line_driver *driver; |
58 | int have_irq; | ||
59 | }; | 59 | }; |
60 | 60 | ||
61 | #define LINE_INIT(str, d) \ | ||
62 | { .count_lock = __SPIN_LOCK_UNLOCKED((str).count_lock), \ | ||
63 | .init_str = str, \ | ||
64 | .init_pri = INIT_STATIC, \ | ||
65 | .valid = 1, \ | ||
66 | .lock = __SPIN_LOCK_UNLOCKED((str).lock), \ | ||
67 | .driver = d } | ||
68 | |||
69 | extern void line_close(struct tty_struct *tty, struct file * filp); | 61 | extern void line_close(struct tty_struct *tty, struct file * filp); |
70 | extern int line_open(struct line *lines, struct tty_struct *tty); | 62 | extern int line_open(struct line *lines, struct tty_struct *tty); |
71 | extern int line_setup(struct line *lines, unsigned int sizeof_lines, | 63 | extern int line_setup(char **conf, unsigned nlines, char **def, |
72 | char *init, char **error_out); | 64 | char *init, char *name); |
73 | extern int line_write(struct tty_struct *tty, const unsigned char *buf, | 65 | extern int line_write(struct tty_struct *tty, const unsigned char *buf, |
74 | int len); | 66 | int len); |
75 | extern int line_put_char(struct tty_struct *tty, unsigned char ch); | 67 | extern int line_put_char(struct tty_struct *tty, unsigned char ch); |
@@ -87,10 +79,11 @@ extern char *add_xterm_umid(char *base); | |||
87 | extern int line_setup_irq(int fd, int input, int output, struct line *line, | 79 | extern int line_setup_irq(int fd, int input, int output, struct line *line, |
88 | void *data); | 80 | void *data); |
89 | extern void line_close_chan(struct line *line); | 81 | extern void line_close_chan(struct line *line); |
90 | extern struct tty_driver *register_lines(struct line_driver *line_driver, | 82 | extern int register_lines(struct line_driver *line_driver, |
91 | const struct tty_operations *driver, | 83 | const struct tty_operations *driver, |
92 | struct line *lines, int nlines); | 84 | struct line *lines, int nlines); |
93 | extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); | 85 | extern int setup_one_line(struct line *lines, int n, char *init, |
86 | const struct chan_opts *opts, char **error_out); | ||
94 | extern void close_lines(struct line *lines, int nlines); | 87 | extern void close_lines(struct line *lines, int nlines); |
95 | 88 | ||
96 | extern int line_config(struct line *lines, unsigned int sizeof_lines, | 89 | extern int line_config(struct line *lines, unsigned int sizeof_lines, |
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index c70e047eed72..e672bd6d43e3 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -773,7 +773,7 @@ static int __init mconsole_init(void) | |||
773 | register_reboot_notifier(&reboot_notifier); | 773 | register_reboot_notifier(&reboot_notifier); |
774 | 774 | ||
775 | err = um_request_irq(MCONSOLE_IRQ, sock, IRQ_READ, mconsole_interrupt, | 775 | err = um_request_irq(MCONSOLE_IRQ, sock, IRQ_READ, mconsole_interrupt, |
776 | IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | 776 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, |
777 | "mconsole", (void *)sock); | 777 | "mconsole", (void *)sock); |
778 | if (err) { | 778 | if (err) { |
779 | printk(KERN_ERR "Failed to get IRQ for management console\n"); | 779 | printk(KERN_ERR "Failed to get IRQ for management console\n"); |
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index d2996183e584..95f4416e6d9f 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
@@ -161,7 +161,7 @@ static int uml_net_open(struct net_device *dev) | |||
161 | } | 161 | } |
162 | 162 | ||
163 | err = um_request_irq(dev->irq, lp->fd, IRQ_READ, uml_net_interrupt, | 163 | err = um_request_irq(dev->irq, lp->fd, IRQ_READ, uml_net_interrupt, |
164 | IRQF_DISABLED | IRQF_SHARED, dev->name, dev); | 164 | IRQF_SHARED, dev->name, dev); |
165 | if (err != 0) { | 165 | if (err != 0) { |
166 | printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err); | 166 | printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err); |
167 | err = -ENETUNREACH; | 167 | err = -ENETUNREACH; |
diff --git a/arch/um/drivers/port_kern.c b/arch/um/drivers/port_kern.c index a11573be0961..e31680e662a4 100644 --- a/arch/um/drivers/port_kern.c +++ b/arch/um/drivers/port_kern.c | |||
@@ -100,7 +100,7 @@ static int port_accept(struct port_list *port) | |||
100 | .port = port }); | 100 | .port = port }); |
101 | 101 | ||
102 | if (um_request_irq(TELNETD_IRQ, socket[0], IRQ_READ, pipe_interrupt, | 102 | if (um_request_irq(TELNETD_IRQ, socket[0], IRQ_READ, pipe_interrupt, |
103 | IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | 103 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, |
104 | "telnetd", conn)) { | 104 | "telnetd", conn)) { |
105 | printk(KERN_ERR "port_accept : failed to get IRQ for " | 105 | printk(KERN_ERR "port_accept : failed to get IRQ for " |
106 | "telnetd\n"); | 106 | "telnetd\n"); |
@@ -184,7 +184,7 @@ void *port_data(int port_num) | |||
184 | } | 184 | } |
185 | 185 | ||
186 | if (um_request_irq(ACCEPT_IRQ, fd, IRQ_READ, port_interrupt, | 186 | if (um_request_irq(ACCEPT_IRQ, fd, IRQ_READ, port_interrupt, |
187 | IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | 187 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, |
188 | "port", port)) { | 188 | "port", port)) { |
189 | printk(KERN_ERR "Failed to get IRQ for port %d\n", port_num); | 189 | printk(KERN_ERR "Failed to get IRQ for port %d\n", port_num); |
190 | goto out_close; | 190 | goto out_close; |
diff --git a/arch/um/drivers/random.c b/arch/um/drivers/random.c index 981085a93f30..b25296e6218a 100644 --- a/arch/um/drivers/random.c +++ b/arch/um/drivers/random.c | |||
@@ -131,7 +131,7 @@ static int __init rng_init (void) | |||
131 | random_fd = err; | 131 | random_fd = err; |
132 | 132 | ||
133 | err = um_request_irq(RANDOM_IRQ, random_fd, IRQ_READ, random_interrupt, | 133 | err = um_request_irq(RANDOM_IRQ, random_fd, IRQ_READ, random_interrupt, |
134 | IRQF_DISABLED | IRQF_SAMPLE_RANDOM, "random", | 134 | IRQF_SAMPLE_RANDOM, "random", |
135 | NULL); | 135 | NULL); |
136 | if (err) | 136 | if (err) |
137 | goto err_out_cleanup_hw; | 137 | goto err_out_cleanup_hw; |
diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c index 9d8c20af6f80..e09801a1327b 100644 --- a/arch/um/drivers/ssl.c +++ b/arch/um/drivers/ssl.c | |||
@@ -20,12 +20,6 @@ | |||
20 | 20 | ||
21 | static const int ssl_version = 1; | 21 | static const int ssl_version = 1; |
22 | 22 | ||
23 | /* Referenced only by tty_driver below - presumably it's locked correctly | ||
24 | * by the tty driver. | ||
25 | */ | ||
26 | |||
27 | static struct tty_driver *ssl_driver; | ||
28 | |||
29 | #define NR_PORTS 64 | 23 | #define NR_PORTS 64 |
30 | 24 | ||
31 | static void ssl_announce(char *dev_name, int dev) | 25 | static void ssl_announce(char *dev_name, int dev) |
@@ -71,8 +65,9 @@ static struct line_driver driver = { | |||
71 | /* The array is initialized by line_init, at initcall time. The | 65 | /* The array is initialized by line_init, at initcall time. The |
72 | * elements are locked individually as needed. | 66 | * elements are locked individually as needed. |
73 | */ | 67 | */ |
74 | static struct line serial_lines[NR_PORTS] = | 68 | static char *conf[NR_PORTS]; |
75 | { [0 ... NR_PORTS - 1] = LINE_INIT(CONFIG_SSL_CHAN, &driver) }; | 69 | static char *def_conf = CONFIG_SSL_CHAN; |
70 | static struct line serial_lines[NR_PORTS]; | ||
76 | 71 | ||
77 | static int ssl_config(char *str, char **error_out) | 72 | static int ssl_config(char *str, char **error_out) |
78 | { | 73 | { |
@@ -156,14 +151,14 @@ static void ssl_console_write(struct console *c, const char *string, | |||
156 | unsigned long flags; | 151 | unsigned long flags; |
157 | 152 | ||
158 | spin_lock_irqsave(&line->lock, flags); | 153 | spin_lock_irqsave(&line->lock, flags); |
159 | console_write_chan(&line->chan_list, string, len); | 154 | console_write_chan(line->chan_out, string, len); |
160 | spin_unlock_irqrestore(&line->lock, flags); | 155 | spin_unlock_irqrestore(&line->lock, flags); |
161 | } | 156 | } |
162 | 157 | ||
163 | static struct tty_driver *ssl_console_device(struct console *c, int *index) | 158 | static struct tty_driver *ssl_console_device(struct console *c, int *index) |
164 | { | 159 | { |
165 | *index = c->index; | 160 | *index = c->index; |
166 | return ssl_driver; | 161 | return driver.driver; |
167 | } | 162 | } |
168 | 163 | ||
169 | static int ssl_console_setup(struct console *co, char *options) | 164 | static int ssl_console_setup(struct console *co, char *options) |
@@ -186,17 +181,30 @@ static struct console ssl_cons = { | |||
186 | static int ssl_init(void) | 181 | static int ssl_init(void) |
187 | { | 182 | { |
188 | char *new_title; | 183 | char *new_title; |
184 | int err; | ||
185 | int i; | ||
189 | 186 | ||
190 | printk(KERN_INFO "Initializing software serial port version %d\n", | 187 | printk(KERN_INFO "Initializing software serial port version %d\n", |
191 | ssl_version); | 188 | ssl_version); |
192 | ssl_driver = register_lines(&driver, &ssl_ops, serial_lines, | 189 | |
190 | err = register_lines(&driver, &ssl_ops, serial_lines, | ||
193 | ARRAY_SIZE(serial_lines)); | 191 | ARRAY_SIZE(serial_lines)); |
192 | if (err) | ||
193 | return err; | ||
194 | 194 | ||
195 | new_title = add_xterm_umid(opts.xterm_title); | 195 | new_title = add_xterm_umid(opts.xterm_title); |
196 | if (new_title != NULL) | 196 | if (new_title != NULL) |
197 | opts.xterm_title = new_title; | 197 | opts.xterm_title = new_title; |
198 | 198 | ||
199 | lines_init(serial_lines, ARRAY_SIZE(serial_lines), &opts); | 199 | for (i = 0; i < NR_PORTS; i++) { |
200 | char *error; | ||
201 | char *s = conf[i]; | ||
202 | if (!s) | ||
203 | s = def_conf; | ||
204 | if (setup_one_line(serial_lines, i, s, &opts, &error)) | ||
205 | printk(KERN_ERR "setup_one_line failed for " | ||
206 | "device %d : %s\n", i, error); | ||
207 | } | ||
200 | 208 | ||
201 | ssl_init_done = 1; | 209 | ssl_init_done = 1; |
202 | register_console(&ssl_cons); | 210 | register_console(&ssl_cons); |
@@ -214,14 +222,7 @@ __uml_exitcall(ssl_exit); | |||
214 | 222 | ||
215 | static int ssl_chan_setup(char *str) | 223 | static int ssl_chan_setup(char *str) |
216 | { | 224 | { |
217 | char *error; | 225 | line_setup(conf, NR_PORTS, &def_conf, str, "serial line"); |
218 | int ret; | ||
219 | |||
220 | ret = line_setup(serial_lines, ARRAY_SIZE(serial_lines), str, &error); | ||
221 | if(ret < 0) | ||
222 | printk(KERN_ERR "Failed to set up serial line with " | ||
223 | "configuration string \"%s\" : %s\n", str, error); | ||
224 | |||
225 | return 1; | 226 | return 1; |
226 | } | 227 | } |
227 | 228 | ||
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c index 088776f01908..7663541c372e 100644 --- a/arch/um/drivers/stdio_console.c +++ b/arch/um/drivers/stdio_console.c | |||
@@ -27,12 +27,6 @@ | |||
27 | 27 | ||
28 | #define MAX_TTYS (16) | 28 | #define MAX_TTYS (16) |
29 | 29 | ||
30 | /* Referenced only by tty_driver below - presumably it's locked correctly | ||
31 | * by the tty driver. | ||
32 | */ | ||
33 | |||
34 | static struct tty_driver *console_driver; | ||
35 | |||
36 | static void stdio_announce(char *dev_name, int dev) | 30 | static void stdio_announce(char *dev_name, int dev) |
37 | { | 31 | { |
38 | printk(KERN_INFO "Virtual console %d assigned device '%s'\n", dev, | 32 | printk(KERN_INFO "Virtual console %d assigned device '%s'\n", dev, |
@@ -76,9 +70,9 @@ static struct line_driver driver = { | |||
76 | /* The array is initialized by line_init, at initcall time. The | 70 | /* The array is initialized by line_init, at initcall time. The |
77 | * elements are locked individually as needed. | 71 | * elements are locked individually as needed. |
78 | */ | 72 | */ |
79 | static struct line vts[MAX_TTYS] = { LINE_INIT(CONFIG_CON_ZERO_CHAN, &driver), | 73 | static char *vt_conf[MAX_TTYS]; |
80 | [ 1 ... MAX_TTYS - 1 ] = | 74 | static char *def_conf; |
81 | LINE_INIT(CONFIG_CON_CHAN, &driver) }; | 75 | static struct line vts[MAX_TTYS]; |
82 | 76 | ||
83 | static int con_config(char *str, char **error_out) | 77 | static int con_config(char *str, char **error_out) |
84 | { | 78 | { |
@@ -130,14 +124,14 @@ static void uml_console_write(struct console *console, const char *string, | |||
130 | unsigned long flags; | 124 | unsigned long flags; |
131 | 125 | ||
132 | spin_lock_irqsave(&line->lock, flags); | 126 | spin_lock_irqsave(&line->lock, flags); |
133 | console_write_chan(&line->chan_list, string, len); | 127 | console_write_chan(line->chan_out, string, len); |
134 | spin_unlock_irqrestore(&line->lock, flags); | 128 | spin_unlock_irqrestore(&line->lock, flags); |
135 | } | 129 | } |
136 | 130 | ||
137 | static struct tty_driver *uml_console_device(struct console *c, int *index) | 131 | static struct tty_driver *uml_console_device(struct console *c, int *index) |
138 | { | 132 | { |
139 | *index = c->index; | 133 | *index = c->index; |
140 | return console_driver; | 134 | return driver.driver; |
141 | } | 135 | } |
142 | 136 | ||
143 | static int uml_console_setup(struct console *co, char *options) | 137 | static int uml_console_setup(struct console *co, char *options) |
@@ -160,18 +154,31 @@ static struct console stdiocons = { | |||
160 | static int stdio_init(void) | 154 | static int stdio_init(void) |
161 | { | 155 | { |
162 | char *new_title; | 156 | char *new_title; |
157 | int err; | ||
158 | int i; | ||
163 | 159 | ||
164 | console_driver = register_lines(&driver, &console_ops, vts, | 160 | err = register_lines(&driver, &console_ops, vts, |
165 | ARRAY_SIZE(vts)); | 161 | ARRAY_SIZE(vts)); |
166 | if (console_driver == NULL) | 162 | if (err) |
167 | return -1; | 163 | return err; |
164 | |||
168 | printk(KERN_INFO "Initialized stdio console driver\n"); | 165 | printk(KERN_INFO "Initialized stdio console driver\n"); |
169 | 166 | ||
170 | new_title = add_xterm_umid(opts.xterm_title); | 167 | new_title = add_xterm_umid(opts.xterm_title); |
171 | if(new_title != NULL) | 168 | if(new_title != NULL) |
172 | opts.xterm_title = new_title; | 169 | opts.xterm_title = new_title; |
173 | 170 | ||
174 | lines_init(vts, ARRAY_SIZE(vts), &opts); | 171 | for (i = 0; i < MAX_TTYS; i++) { |
172 | char *error; | ||
173 | char *s = vt_conf[i]; | ||
174 | if (!s) | ||
175 | s = def_conf; | ||
176 | if (!s) | ||
177 | s = i ? CONFIG_CON_CHAN : CONFIG_CON_ZERO_CHAN; | ||
178 | if (setup_one_line(vts, i, s, &opts, &error)) | ||
179 | printk(KERN_ERR "setup_one_line failed for " | ||
180 | "device %d : %s\n", i, error); | ||
181 | } | ||
175 | 182 | ||
176 | con_init_done = 1; | 183 | con_init_done = 1; |
177 | register_console(&stdiocons); | 184 | register_console(&stdiocons); |
@@ -189,14 +196,7 @@ __uml_exitcall(console_exit); | |||
189 | 196 | ||
190 | static int console_chan_setup(char *str) | 197 | static int console_chan_setup(char *str) |
191 | { | 198 | { |
192 | char *error; | 199 | line_setup(vt_conf, MAX_TTYS, &def_conf, str, "console"); |
193 | int ret; | ||
194 | |||
195 | ret = line_setup(vts, ARRAY_SIZE(vts), str, &error); | ||
196 | if(ret < 0) | ||
197 | printk(KERN_ERR "Failed to set up console with " | ||
198 | "configuration string \"%s\" : %s\n", str, error); | ||
199 | |||
200 | return 1; | 200 | return 1; |
201 | } | 201 | } |
202 | __setup("con", console_chan_setup); | 202 | __setup("con", console_chan_setup); |
diff --git a/arch/um/drivers/ubd_user.h b/arch/um/drivers/ubd.h index 3845051f1b10..3845051f1b10 100644 --- a/arch/um/drivers/ubd_user.h +++ b/arch/um/drivers/ubd.h | |||
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 944453a3ec99..20505cafa299 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -19,40 +19,26 @@ | |||
19 | 19 | ||
20 | #define UBD_SHIFT 4 | 20 | #define UBD_SHIFT 4 |
21 | 21 | ||
22 | #include "linux/kernel.h" | 22 | #include <linux/module.h> |
23 | #include "linux/module.h" | 23 | #include <linux/init.h> |
24 | #include "linux/blkdev.h" | 24 | #include <linux/blkdev.h> |
25 | #include "linux/ata.h" | 25 | #include <linux/ata.h> |
26 | #include "linux/hdreg.h" | 26 | #include <linux/hdreg.h> |
27 | #include "linux/init.h" | 27 | #include <linux/cdrom.h> |
28 | #include "linux/cdrom.h" | 28 | #include <linux/proc_fs.h> |
29 | #include "linux/proc_fs.h" | 29 | #include <linux/seq_file.h> |
30 | #include "linux/seq_file.h" | 30 | #include <linux/ctype.h> |
31 | #include "linux/ctype.h" | 31 | #include <linux/slab.h> |
32 | #include "linux/capability.h" | 32 | #include <linux/vmalloc.h> |
33 | #include "linux/mm.h" | 33 | #include <linux/platform_device.h> |
34 | #include "linux/slab.h" | 34 | #include <linux/scatterlist.h> |
35 | #include "linux/vmalloc.h" | 35 | #include <asm/tlbflush.h> |
36 | #include "linux/mutex.h" | ||
37 | #include "linux/blkpg.h" | ||
38 | #include "linux/genhd.h" | ||
39 | #include "linux/spinlock.h" | ||
40 | #include "linux/platform_device.h" | ||
41 | #include "linux/scatterlist.h" | ||
42 | #include "asm/segment.h" | ||
43 | #include "asm/uaccess.h" | ||
44 | #include "asm/irq.h" | ||
45 | #include "asm/types.h" | ||
46 | #include "asm/tlbflush.h" | ||
47 | #include "mem_user.h" | ||
48 | #include "kern_util.h" | 36 | #include "kern_util.h" |
49 | #include "mconsole_kern.h" | 37 | #include "mconsole_kern.h" |
50 | #include "init.h" | 38 | #include "init.h" |
51 | #include "irq_user.h" | ||
52 | #include "irq_kern.h" | 39 | #include "irq_kern.h" |
53 | #include "ubd_user.h" | 40 | #include "ubd.h" |
54 | #include "os.h" | 41 | #include "os.h" |
55 | #include "mem.h" | ||
56 | #include "cow.h" | 42 | #include "cow.h" |
57 | 43 | ||
58 | enum ubd_req { UBD_READ, UBD_WRITE }; | 44 | enum ubd_req { UBD_READ, UBD_WRITE }; |
@@ -1115,7 +1101,7 @@ static int __init ubd_driver_init(void){ | |||
1115 | return 0; | 1101 | return 0; |
1116 | } | 1102 | } |
1117 | err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr, | 1103 | err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr, |
1118 | IRQF_DISABLED, "ubd", ubd_devs); | 1104 | 0, "ubd", ubd_devs); |
1119 | if(err != 0) | 1105 | if(err != 0) |
1120 | printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err); | 1106 | printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err); |
1121 | return 0; | 1107 | return 0; |
diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c index 007b94d97726..ffe02c431dea 100644 --- a/arch/um/drivers/ubd_user.c +++ b/arch/um/drivers/ubd_user.c | |||
@@ -15,14 +15,12 @@ | |||
15 | #include <sys/socket.h> | 15 | #include <sys/socket.h> |
16 | #include <sys/mman.h> | 16 | #include <sys/mman.h> |
17 | #include <sys/param.h> | 17 | #include <sys/param.h> |
18 | #include "asm/types.h" | ||
19 | #include "ubd_user.h" | ||
20 | #include "os.h" | ||
21 | #include "cow.h" | ||
22 | |||
23 | #include <endian.h> | 18 | #include <endian.h> |
24 | #include <byteswap.h> | 19 | #include <byteswap.h> |
25 | 20 | ||
21 | #include "ubd.h" | ||
22 | #include "os.h" | ||
23 | |||
26 | void ignore_sigwinch_sig(void) | 24 | void ignore_sigwinch_sig(void) |
27 | { | 25 | { |
28 | signal(SIGWINCH, SIG_IGN); | 26 | signal(SIGWINCH, SIG_IGN); |
diff --git a/arch/um/drivers/xterm_kern.c b/arch/um/drivers/xterm_kern.c index b646bccef37a..8bd130f0bda3 100644 --- a/arch/um/drivers/xterm_kern.c +++ b/arch/um/drivers/xterm_kern.c | |||
@@ -50,7 +50,7 @@ int xterm_fd(int socket, int *pid_out) | |||
50 | init_completion(&data->ready); | 50 | init_completion(&data->ready); |
51 | 51 | ||
52 | err = um_request_irq(XTERM_IRQ, socket, IRQ_READ, xterm_interrupt, | 52 | err = um_request_irq(XTERM_IRQ, socket, IRQ_READ, xterm_interrupt, |
53 | IRQF_DISABLED | IRQF_SHARED | IRQF_SAMPLE_RANDOM, | 53 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, |
54 | "xterm", data); | 54 | "xterm", data); |
55 | if (err) { | 55 | if (err) { |
56 | printk(KERN_ERR "xterm_fd : failed to get IRQ for xterm, " | 56 | printk(KERN_ERR "xterm_fd : failed to get IRQ for xterm, " |
diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index 451f4517b334..8419f5cf2ac7 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild | |||
@@ -1,3 +1,3 @@ | |||
1 | generic-y += bug.h cputime.h device.h emergency-restart.h futex.h hardirq.h | 1 | generic-y += bug.h cputime.h device.h emergency-restart.h futex.h hardirq.h |
2 | generic-y += hw_irq.h irq_regs.h kdebug.h percpu.h sections.h topology.h xor.h | 2 | generic-y += hw_irq.h irq_regs.h kdebug.h percpu.h sections.h topology.h xor.h |
3 | generic-y += ftrace.h | 3 | generic-y += ftrace.h pci.h io.h param.h delay.h mutex.h current.h |
diff --git a/arch/um/include/asm/asm-offsets.h b/arch/um/include/asm/asm-offsets.h deleted file mode 100644 index d370ee36a182..000000000000 --- a/arch/um/include/asm/asm-offsets.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <generated/asm-offsets.h> | ||
diff --git a/arch/um/include/asm/auxvec.h b/arch/um/include/asm/auxvec.h deleted file mode 100644 index 1e5e1c2fc9b1..000000000000 --- a/arch/um/include/asm/auxvec.h +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | #ifndef __UM_AUXVEC_H | ||
2 | #define __UM_AUXVEC_H | ||
3 | |||
4 | #endif | ||
diff --git a/arch/um/include/asm/current.h b/arch/um/include/asm/current.h deleted file mode 100644 index c2191d9aa03d..000000000000 --- a/arch/um/include/asm/current.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __UM_CURRENT_H | ||
7 | #define __UM_CURRENT_H | ||
8 | |||
9 | #include "linux/thread_info.h" | ||
10 | |||
11 | #define current (current_thread_info()->task) | ||
12 | |||
13 | #endif | ||
diff --git a/arch/um/include/asm/delay.h b/arch/um/include/asm/delay.h deleted file mode 100644 index 8a5576d8eda5..000000000000 --- a/arch/um/include/asm/delay.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef __UM_DELAY_H | ||
2 | #define __UM_DELAY_H | ||
3 | |||
4 | /* Undefined on purpose */ | ||
5 | extern void __bad_udelay(void); | ||
6 | extern void __bad_ndelay(void); | ||
7 | |||
8 | extern void __udelay(unsigned long usecs); | ||
9 | extern void __ndelay(unsigned long usecs); | ||
10 | extern void __delay(unsigned long loops); | ||
11 | |||
12 | #define udelay(n) ((__builtin_constant_p(n) && (n) > 20000) ? \ | ||
13 | __bad_udelay() : __udelay(n)) | ||
14 | |||
15 | #define ndelay(n) ((__builtin_constant_p(n) && (n) > 20000) ? \ | ||
16 | __bad_ndelay() : __ndelay(n)) | ||
17 | |||
18 | #endif | ||
diff --git a/arch/um/include/asm/io.h b/arch/um/include/asm/io.h deleted file mode 100644 index 44e8b8c772ae..000000000000 --- a/arch/um/include/asm/io.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | #ifndef __UM_IO_H | ||
2 | #define __UM_IO_H | ||
3 | |||
4 | #include "asm/page.h" | ||
5 | |||
6 | #define IO_SPACE_LIMIT 0xdeadbeef /* Sure hope nothing uses this */ | ||
7 | |||
8 | static inline int inb(unsigned long i) { return(0); } | ||
9 | static inline void outb(char c, unsigned long i) { } | ||
10 | |||
11 | /* | ||
12 | * Change virtual addresses to physical addresses and vv. | ||
13 | * These are pretty trivial | ||
14 | */ | ||
15 | static inline unsigned long virt_to_phys(volatile void * address) | ||
16 | { | ||
17 | return __pa((void *) address); | ||
18 | } | ||
19 | |||
20 | static inline void * phys_to_virt(unsigned long address) | ||
21 | { | ||
22 | return __va(address); | ||
23 | } | ||
24 | |||
25 | /* | ||
26 | * Convert a physical pointer to a virtual kernel pointer for /dev/mem | ||
27 | * access | ||
28 | */ | ||
29 | #define xlate_dev_mem_ptr(p) __va(p) | ||
30 | |||
31 | /* | ||
32 | * Convert a virtual cached pointer to an uncached pointer | ||
33 | */ | ||
34 | #define xlate_dev_kmem_ptr(p) p | ||
35 | |||
36 | static inline void writeb(unsigned char b, volatile void __iomem *addr) | ||
37 | { | ||
38 | *(volatile unsigned char __force *) addr = b; | ||
39 | } | ||
40 | static inline void writew(unsigned short b, volatile void __iomem *addr) | ||
41 | { | ||
42 | *(volatile unsigned short __force *) addr = b; | ||
43 | } | ||
44 | static inline void writel(unsigned int b, volatile void __iomem *addr) | ||
45 | { | ||
46 | *(volatile unsigned int __force *) addr = b; | ||
47 | } | ||
48 | static inline void writeq(unsigned int b, volatile void __iomem *addr) | ||
49 | { | ||
50 | *(volatile unsigned long long __force *) addr = b; | ||
51 | } | ||
52 | #define __raw_writeb writeb | ||
53 | #define __raw_writew writew | ||
54 | #define __raw_writel writel | ||
55 | #define __raw_writeq writeq | ||
56 | |||
57 | #endif | ||
diff --git a/arch/um/include/asm/mutex.h b/arch/um/include/asm/mutex.h deleted file mode 100644 index 458c1f7fbc18..000000000000 --- a/arch/um/include/asm/mutex.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | /* | ||
2 | * Pull in the generic implementation for the mutex fastpath. | ||
3 | * | ||
4 | * TODO: implement optimized primitives instead, or leave the generic | ||
5 | * implementation in place, or pick the atomic_xchg() based generic | ||
6 | * implementation. (see asm-generic/mutex-xchg.h for details) | ||
7 | */ | ||
8 | |||
9 | #include <asm-generic/mutex-dec.h> | ||
diff --git a/arch/um/include/asm/param.h b/arch/um/include/asm/param.h deleted file mode 100644 index e44f4e60d16d..000000000000 --- a/arch/um/include/asm/param.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef _UM_PARAM_H | ||
2 | #define _UM_PARAM_H | ||
3 | |||
4 | #define EXEC_PAGESIZE 4096 | ||
5 | |||
6 | #ifndef NOGROUP | ||
7 | #define NOGROUP (-1) | ||
8 | #endif | ||
9 | |||
10 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | ||
11 | |||
12 | #ifdef __KERNEL__ | ||
13 | #define HZ CONFIG_HZ | ||
14 | #define USER_HZ 100 /* .. some user interfaces are in "ticks" */ | ||
15 | #define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */ | ||
16 | #else | ||
17 | #define HZ 100 | ||
18 | #endif | ||
19 | |||
20 | #endif | ||
diff --git a/arch/um/include/asm/pci.h b/arch/um/include/asm/pci.h deleted file mode 100644 index b44cf59ede1e..000000000000 --- a/arch/um/include/asm/pci.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef __UM_PCI_H | ||
2 | #define __UM_PCI_H | ||
3 | |||
4 | #define PCI_DMA_BUS_IS_PHYS (1) | ||
5 | |||
6 | #endif | ||
diff --git a/arch/um/include/asm/pgalloc.h b/arch/um/include/asm/pgalloc.h index 32c8ce4e1515..bf90b2aa2002 100644 --- a/arch/um/include/asm/pgalloc.h +++ b/arch/um/include/asm/pgalloc.h | |||
@@ -8,8 +8,7 @@ | |||
8 | #ifndef __UM_PGALLOC_H | 8 | #ifndef __UM_PGALLOC_H |
9 | #define __UM_PGALLOC_H | 9 | #define __UM_PGALLOC_H |
10 | 10 | ||
11 | #include "linux/mm.h" | 11 | #include <linux/mm.h> |
12 | #include "asm/fixmap.h" | ||
13 | 12 | ||
14 | #define pmd_populate_kernel(mm, pmd, pte) \ | 13 | #define pmd_populate_kernel(mm, pmd, pte) \ |
15 | set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte))) | 14 | set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte))) |
diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index 41474fb5eee7..6a3f9845743e 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h | |||
@@ -69,6 +69,8 @@ extern unsigned long end_iomem; | |||
69 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) | 69 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) |
70 | #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC) | 70 | #define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC) |
71 | 71 | ||
72 | #define io_remap_pfn_range remap_pfn_range | ||
73 | |||
72 | /* | 74 | /* |
73 | * The i386 can't do page protection for execute, and considers that the same | 75 | * The i386 can't do page protection for execute, and considers that the same |
74 | * are read. | 76 | * are read. |
diff --git a/arch/um/include/asm/ptrace-generic.h b/arch/um/include/asm/ptrace-generic.h index f605d3c4844c..e786a6a3ec5e 100644 --- a/arch/um/include/asm/ptrace-generic.h +++ b/arch/um/include/asm/ptrace-generic.h | |||
@@ -9,7 +9,6 @@ | |||
9 | #ifndef __ASSEMBLY__ | 9 | #ifndef __ASSEMBLY__ |
10 | 10 | ||
11 | #include <asm/ptrace-abi.h> | 11 | #include <asm/ptrace-abi.h> |
12 | #include <asm/user.h> | ||
13 | #include "sysdep/ptrace.h" | 12 | #include "sysdep/ptrace.h" |
14 | 13 | ||
15 | struct pt_regs { | 14 | struct pt_regs { |
diff --git a/arch/um/include/shared/common-offsets.h b/arch/um/include/shared/common-offsets.h index d7fe563aa7e7..40db8f71deae 100644 --- a/arch/um/include/shared/common-offsets.h +++ b/arch/um/include/shared/common-offsets.h | |||
@@ -2,8 +2,6 @@ | |||
2 | 2 | ||
3 | DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); | 3 | DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); |
4 | 4 | ||
5 | OFFSET(HOST_TASK_PID, task_struct, pid); | ||
6 | |||
7 | DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); | 5 | DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE); |
8 | DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); | 6 | DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK); |
9 | DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); | 7 | DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT); |
diff --git a/arch/um/include/shared/kern_util.h b/arch/um/include/shared/kern_util.h index 0f1483852460..00965d06d2ca 100644 --- a/arch/um/include/shared/kern_util.h +++ b/arch/um/include/shared/kern_util.h | |||
@@ -48,7 +48,7 @@ extern void do_uml_exitcalls(void); | |||
48 | * GFP_ATOMIC. | 48 | * GFP_ATOMIC. |
49 | */ | 49 | */ |
50 | extern int __cant_sleep(void); | 50 | extern int __cant_sleep(void); |
51 | extern void *get_current(void); | 51 | extern int get_current_pid(void); |
52 | extern int copy_from_user_proc(void *to, void *from, int size); | 52 | extern int copy_from_user_proc(void *to, void *from, int size); |
53 | extern int cpu(void); | 53 | extern int cpu(void); |
54 | extern char *uml_strdup(const char *string); | 54 | extern char *uml_strdup(const char *string); |
diff --git a/arch/um/kernel/Makefile b/arch/um/kernel/Makefile index bc494741b1f3..492bc4c1b62b 100644 --- a/arch/um/kernel/Makefile +++ b/arch/um/kernel/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # Licensed under the GPL | 3 | # Licensed under the GPL |
4 | # | 4 | # |
5 | 5 | ||
6 | CPPFLAGS_vmlinux.lds := -U$(SUBARCH) -DSTART=$(LDS_START) \ | 6 | CPPFLAGS_vmlinux.lds := -DSTART=$(LDS_START) \ |
7 | -DELF_ARCH=$(LDS_ELF_ARCH) \ | 7 | -DELF_ARCH=$(LDS_ELF_ARCH) \ |
8 | -DELF_FORMAT=$(LDS_ELF_FORMAT) | 8 | -DELF_FORMAT=$(LDS_ELF_FORMAT) |
9 | extra-y := vmlinux.lds | 9 | extra-y := vmlinux.lds |
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index 69f24905abdc..f386d04a84a5 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c | |||
@@ -126,9 +126,9 @@ void exit_thread(void) | |||
126 | { | 126 | { |
127 | } | 127 | } |
128 | 128 | ||
129 | void *get_current(void) | 129 | int get_current_pid(void) |
130 | { | 130 | { |
131 | return current; | 131 | return task_pid_nr(current); |
132 | } | 132 | } |
133 | 133 | ||
134 | /* | 134 | /* |
diff --git a/arch/um/kernel/sigio.c b/arch/um/kernel/sigio.c index 2b272b63b514..2a1639255763 100644 --- a/arch/um/kernel/sigio.c +++ b/arch/um/kernel/sigio.c | |||
@@ -25,7 +25,7 @@ int write_sigio_irq(int fd) | |||
25 | int err; | 25 | int err; |
26 | 26 | ||
27 | err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt, | 27 | err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt, |
28 | IRQF_DISABLED|IRQF_SAMPLE_RANDOM, "write sigio", | 28 | IRQF_SAMPLE_RANDOM, "write sigio", |
29 | NULL); | 29 | NULL); |
30 | if (err) { | 30 | if (err) { |
31 | printk(KERN_ERR "write_sigio_irq : um_request_irq failed, " | 31 | printk(KERN_ERR "write_sigio_irq : um_request_irq failed, " |
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index 82a6e22f1f35..d1a23fb3190d 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -82,7 +82,7 @@ static void __init setup_itimer(void) | |||
82 | { | 82 | { |
83 | int err; | 83 | int err; |
84 | 84 | ||
85 | err = request_irq(TIMER_IRQ, um_timer, IRQF_DISABLED, "timer", NULL); | 85 | err = request_irq(TIMER_IRQ, um_timer, 0, "timer", NULL); |
86 | if (err != 0) | 86 | if (err != 0) |
87 | printk(KERN_ERR "register_timer : request_irq failed - " | 87 | printk(KERN_ERR "register_timer : request_irq failed - " |
88 | "errno = %d\n", -err); | 88 | "errno = %d\n", -err); |
diff --git a/arch/um/os-Linux/Makefile b/arch/um/os-Linux/Makefile index dd764101e488..08ff5094fcdd 100644 --- a/arch/um/os-Linux/Makefile +++ b/arch/um/os-Linux/Makefile | |||
@@ -13,8 +13,6 @@ USER_OBJS := $(user-objs-y) aio.o elf_aux.o execvp.o file.o helper.o irq.o \ | |||
13 | main.o mem.o process.o registers.o sigio.o signal.o start_up.o time.o \ | 13 | main.o mem.o process.o registers.o sigio.o signal.o start_up.o time.o \ |
14 | tty.o umid.o util.o | 14 | tty.o umid.o util.o |
15 | 15 | ||
16 | CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH) | ||
17 | |||
18 | HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \ | 16 | HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \ |
19 | echo -DHAVE_AIO_ABI ) | 17 | echo -DHAVE_AIO_ABI ) |
20 | CFLAGS_aio.o += $(HAVE_AIO_ABI) | 18 | CFLAGS_aio.o += $(HAVE_AIO_ABI) |
diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c index 45ffe46871e0..73926fa3f96b 100644 --- a/arch/um/os-Linux/user_syms.c +++ b/arch/um/os-Linux/user_syms.c | |||
@@ -45,7 +45,7 @@ EXPORT_SYMBOL(readdir64); | |||
45 | extern void truncate64(void) __attribute__((weak)); | 45 | extern void truncate64(void) __attribute__((weak)); |
46 | EXPORT_SYMBOL(truncate64); | 46 | EXPORT_SYMBOL(truncate64); |
47 | 47 | ||
48 | #ifdef SUBARCH_i386 | 48 | #ifdef CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA |
49 | EXPORT_SYMBOL(vsyscall_ehdr); | 49 | EXPORT_SYMBOL(vsyscall_ehdr); |
50 | EXPORT_SYMBOL(vsyscall_end); | 50 | EXPORT_SYMBOL(vsyscall_end); |
51 | #endif | 51 | #endif |
diff --git a/arch/um/scripts/Makefile.rules b/arch/um/scripts/Makefile.rules index 2eb2843b0634..d50270d26b42 100644 --- a/arch/um/scripts/Makefile.rules +++ b/arch/um/scripts/Makefile.rules | |||
@@ -9,8 +9,6 @@ USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file)) | |||
9 | 9 | ||
10 | $(USER_OBJS:.o=.%): \ | 10 | $(USER_OBJS:.o=.%): \ |
11 | c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) -include user.h $(CFLAGS_$(basetarget).o) | 11 | c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) -include user.h $(CFLAGS_$(basetarget).o) |
12 | $(USER_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \ | ||
13 | -Dunix -D__unix__ -D__$(SUBARCH)__ $(CF) | ||
14 | 12 | ||
15 | # These are like USER_OBJS but filter USER_CFLAGS through unprofile instead of | 13 | # These are like USER_OBJS but filter USER_CFLAGS through unprofile instead of |
16 | # using it directly. | 14 | # using it directly. |
@@ -18,8 +16,9 @@ UNPROFILE_OBJS := $(foreach file,$(UNPROFILE_OBJS),$(obj)/$(file)) | |||
18 | 16 | ||
19 | $(UNPROFILE_OBJS:.o=.%): \ | 17 | $(UNPROFILE_OBJS:.o=.%): \ |
20 | c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) $(CFLAGS_$(basetarget).o) | 18 | c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) $(CFLAGS_$(basetarget).o) |
21 | $(UNPROFILE_OBJS) : CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ \ | 19 | |
22 | -Dunix -D__unix__ -D__$(SUBARCH)__ $(CF) | 20 | $(USER_OBJS) $(UNPROFILE_OBJS): \ |
21 | CHECKFLAGS := $(patsubst $(NOSTDINC_FLAGS),,$(CHECKFLAGS)) | ||
23 | 22 | ||
24 | # The stubs can't try to call mcount or update basic block data | 23 | # The stubs can't try to call mcount or update basic block data |
25 | define unprofile | 24 | define unprofile |
diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um index 36ddec6a41c9..4be406abeefd 100644 --- a/arch/x86/Makefile.um +++ b/arch/x86/Makefile.um | |||
@@ -8,15 +8,11 @@ ELF_ARCH := i386 | |||
8 | ELF_FORMAT := elf32-i386 | 8 | ELF_FORMAT := elf32-i386 |
9 | CHECKFLAGS += -D__i386__ | 9 | CHECKFLAGS += -D__i386__ |
10 | 10 | ||
11 | ifeq ("$(origin SUBARCH)", "command line") | ||
12 | ifneq ("$(shell uname -m | sed -e s/i.86/i386/)", "$(SUBARCH)") | ||
13 | KBUILD_CFLAGS += $(call cc-option,-m32) | 11 | KBUILD_CFLAGS += $(call cc-option,-m32) |
14 | KBUILD_AFLAGS += $(call cc-option,-m32) | 12 | KBUILD_AFLAGS += $(call cc-option,-m32) |
15 | LINK-y += $(call cc-option,-m32) | 13 | LINK-y += $(call cc-option,-m32) |
16 | 14 | ||
17 | export LDFLAGS | 15 | export LDFLAGS |
18 | endif | ||
19 | endif | ||
20 | 16 | ||
21 | # First of all, tune CFLAGS for the specific CPU. This actually sets cflags-y. | 17 | # First of all, tune CFLAGS for the specific CPU. This actually sets cflags-y. |
22 | include $(srctree)/arch/x86/Makefile_32.cpu | 18 | include $(srctree)/arch/x86/Makefile_32.cpu |
diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig index b2b54d2edf53..9926e11a772d 100644 --- a/arch/x86/um/Kconfig +++ b/arch/x86/um/Kconfig | |||
@@ -15,8 +15,8 @@ config UML_X86 | |||
15 | select GENERIC_FIND_FIRST_BIT | 15 | select GENERIC_FIND_FIRST_BIT |
16 | 16 | ||
17 | config 64BIT | 17 | config 64BIT |
18 | bool | 18 | bool "64-bit kernel" if SUBARCH = "x86" |
19 | default SUBARCH = "x86_64" | 19 | default SUBARCH != "i386" |
20 | 20 | ||
21 | config X86_32 | 21 | config X86_32 |
22 | def_bool !64BIT | 22 | def_bool !64BIT |
diff --git a/arch/x86/um/asm/processor.h b/arch/x86/um/asm/processor.h index 2c32df6fe231..04f82e020f2b 100644 --- a/arch/x86/um/asm/processor.h +++ b/arch/x86/um/asm/processor.h | |||
@@ -17,6 +17,16 @@ | |||
17 | #define ARCH_IS_STACKGROW(address) \ | 17 | #define ARCH_IS_STACKGROW(address) \ |
18 | (address + 65536 + 32 * sizeof(unsigned long) >= UPT_SP(¤t->thread.regs.regs)) | 18 | (address + 65536 + 32 * sizeof(unsigned long) >= UPT_SP(¤t->thread.regs.regs)) |
19 | 19 | ||
20 | #include <asm/user.h> | ||
21 | |||
22 | /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ | ||
23 | static inline void rep_nop(void) | ||
24 | { | ||
25 | __asm__ __volatile__("rep;nop": : :"memory"); | ||
26 | } | ||
27 | |||
28 | #define cpu_relax() rep_nop() | ||
29 | |||
20 | #include <asm/processor-generic.h> | 30 | #include <asm/processor-generic.h> |
21 | 31 | ||
22 | #endif | 32 | #endif |
diff --git a/arch/x86/um/asm/processor_32.h b/arch/x86/um/asm/processor_32.h index 018f732704dd..6c6689e574ce 100644 --- a/arch/x86/um/asm/processor_32.h +++ b/arch/x86/um/asm/processor_32.h | |||
@@ -45,16 +45,6 @@ static inline void arch_copy_thread(struct arch_thread *from, | |||
45 | memcpy(&to->tls_array, &from->tls_array, sizeof(from->tls_array)); | 45 | memcpy(&to->tls_array, &from->tls_array, sizeof(from->tls_array)); |
46 | } | 46 | } |
47 | 47 | ||
48 | #include <asm/user.h> | ||
49 | |||
50 | /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ | ||
51 | static inline void rep_nop(void) | ||
52 | { | ||
53 | __asm__ __volatile__("rep;nop": : :"memory"); | ||
54 | } | ||
55 | |||
56 | #define cpu_relax() rep_nop() | ||
57 | |||
58 | /* | 48 | /* |
59 | * Default implementation of macro that returns current | 49 | * Default implementation of macro that returns current |
60 | * instruction pointer ("program counter"). Stolen | 50 | * instruction pointer ("program counter"). Stolen |
diff --git a/arch/x86/um/asm/processor_64.h b/arch/x86/um/asm/processor_64.h index 61de92d916c3..4b02a8455bd1 100644 --- a/arch/x86/um/asm/processor_64.h +++ b/arch/x86/um/asm/processor_64.h | |||
@@ -14,14 +14,6 @@ struct arch_thread { | |||
14 | struct faultinfo faultinfo; | 14 | struct faultinfo faultinfo; |
15 | }; | 15 | }; |
16 | 16 | ||
17 | /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ | ||
18 | static inline void rep_nop(void) | ||
19 | { | ||
20 | __asm__ __volatile__("rep;nop": : :"memory"); | ||
21 | } | ||
22 | |||
23 | #define cpu_relax() rep_nop() | ||
24 | |||
25 | #define INIT_ARCH_THREAD { .debugregs = { [ 0 ... 7 ] = 0 }, \ | 17 | #define INIT_ARCH_THREAD { .debugregs = { [ 0 ... 7 ] = 0 }, \ |
26 | .debugregs_seq = 0, \ | 18 | .debugregs_seq = 0, \ |
27 | .fs = 0, \ | 19 | .fs = 0, \ |
@@ -37,8 +29,6 @@ static inline void arch_copy_thread(struct arch_thread *from, | |||
37 | to->fs = from->fs; | 29 | to->fs = from->fs; |
38 | } | 30 | } |
39 | 31 | ||
40 | #include <asm/user.h> | ||
41 | |||
42 | #define current_text_addr() \ | 32 | #define current_text_addr() \ |
43 | ({ void *pc; __asm__("movq $1f,%0\n1:":"=g" (pc)); pc; }) | 33 | ({ void *pc; __asm__("movq $1f,%0\n1:":"=g" (pc)); pc; }) |
44 | 34 | ||
diff --git a/arch/x86/um/bugs_32.c b/arch/x86/um/bugs_32.c index a1fba5fb9dbe..17d88cf2c6c4 100644 --- a/arch/x86/um/bugs_32.c +++ b/arch/x86/um/bugs_32.c | |||
@@ -13,8 +13,6 @@ | |||
13 | static int host_has_cmov = 1; | 13 | static int host_has_cmov = 1; |
14 | static jmp_buf cmov_test_return; | 14 | static jmp_buf cmov_test_return; |
15 | 15 | ||
16 | #define TASK_PID(task) *((int *) &(((char *) (task))[HOST_TASK_PID])) | ||
17 | |||
18 | static void cmov_sigill_test_handler(int sig) | 16 | static void cmov_sigill_test_handler(int sig) |
19 | { | 17 | { |
20 | host_has_cmov = 0; | 18 | host_has_cmov = 0; |
@@ -51,7 +49,7 @@ void arch_examine_signal(int sig, struct uml_pt_regs *regs) | |||
51 | * This is testing for a cmov (0x0f 0x4x) instruction causing a | 49 | * This is testing for a cmov (0x0f 0x4x) instruction causing a |
52 | * SIGILL in init. | 50 | * SIGILL in init. |
53 | */ | 51 | */ |
54 | if ((sig != SIGILL) || (TASK_PID(get_current()) != 1)) | 52 | if ((sig != SIGILL) || (get_current_pid() != 1)) |
55 | return; | 53 | return; |
56 | 54 | ||
57 | if (copy_from_user_proc(tmp, (void *) UPT_IP(regs), 2)) { | 55 | if (copy_from_user_proc(tmp, (void *) UPT_IP(regs), 2)) { |
diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index 1be621841400..284cf3433720 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | menuconfig MTD | 1 | menuconfig MTD |
2 | tristate "Memory Technology Device (MTD) support" | 2 | tristate "Memory Technology Device (MTD) support" |
3 | depends on HAS_IOMEM | 3 | depends on GENERIC_IO |
4 | help | 4 | help |
5 | Memory Technology Devices are flash, RAM and similar chips, often | 5 | Memory Technology Devices are flash, RAM and similar chips, often |
6 | used for solid state file systems on embedded devices. This option | 6 | used for solid state file systems on embedded devices. This option |
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig index 37b05c3f2792..8d3dac40d7e6 100644 --- a/drivers/mtd/devices/Kconfig +++ b/drivers/mtd/devices/Kconfig | |||
@@ -1,5 +1,6 @@ | |||
1 | menu "Self-contained MTD device drivers" | 1 | menu "Self-contained MTD device drivers" |
2 | depends on MTD!=n | 2 | depends on MTD!=n |
3 | depends on HAS_IOMEM | ||
3 | 4 | ||
4 | config MTD_PMC551 | 5 | config MTD_PMC551 |
5 | tristate "Ramix PMC551 PCI Mezzanine RAM card support" | 6 | tristate "Ramix PMC551 PCI Mezzanine RAM card support" |
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 6c5c431c64af..8af67cfd671a 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
@@ -1,5 +1,6 @@ | |||
1 | menu "Mapping drivers for chip access" | 1 | menu "Mapping drivers for chip access" |
2 | depends on MTD!=n | 2 | depends on MTD!=n |
3 | depends on HAS_IOMEM | ||
3 | 4 | ||
4 | config MTD_COMPLEX_MAPPINGS | 5 | config MTD_COMPLEX_MAPPINGS |
5 | bool "Support non-linear mappings of flash chips" | 6 | bool "Support non-linear mappings of flash chips" |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 3d8d2d83995f..a3c4de551ebe 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
@@ -246,6 +246,7 @@ config MTD_NAND_BCM_UMI_HWCS | |||
246 | config MTD_NAND_DISKONCHIP | 246 | config MTD_NAND_DISKONCHIP |
247 | tristate "DiskOnChip 2000, Millennium and Millennium Plus (NAND reimplementation) (EXPERIMENTAL)" | 247 | tristate "DiskOnChip 2000, Millennium and Millennium Plus (NAND reimplementation) (EXPERIMENTAL)" |
248 | depends on EXPERIMENTAL | 248 | depends on EXPERIMENTAL |
249 | depends on HAS_IOMEM | ||
249 | select REED_SOLOMON | 250 | select REED_SOLOMON |
250 | select REED_SOLOMON_DEC16 | 251 | select REED_SOLOMON_DEC16 |
251 | help | 252 | help |
@@ -431,6 +432,7 @@ config MTD_NAND_GPMI_NAND | |||
431 | 432 | ||
432 | config MTD_NAND_PLATFORM | 433 | config MTD_NAND_PLATFORM |
433 | tristate "Support for generic platform NAND driver" | 434 | tristate "Support for generic platform NAND driver" |
435 | depends on HAS_IOMEM | ||
434 | help | 436 | help |
435 | This implements a generic NAND driver for on-SOC platform | 437 | This implements a generic NAND driver for on-SOC platform |
436 | devices. You will need to provide platform-specific functions | 438 | devices. You will need to provide platform-specific functions |
diff --git a/drivers/mtd/onenand/Kconfig b/drivers/mtd/onenand/Kconfig index 772ad2966619..91467bb03634 100644 --- a/drivers/mtd/onenand/Kconfig +++ b/drivers/mtd/onenand/Kconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | menuconfig MTD_ONENAND | 1 | menuconfig MTD_ONENAND |
2 | tristate "OneNAND Device Support" | 2 | tristate "OneNAND Device Support" |
3 | depends on MTD | 3 | depends on MTD |
4 | depends on HAS_IOMEM | ||
4 | help | 5 | help |
5 | This enables support for accessing all type of OneNAND flash | 6 | This enables support for accessing all type of OneNAND flash |
6 | devices. For further information see | 7 | devices. For further information see |
diff --git a/fs/hostfs/hostfs.h b/fs/hostfs/hostfs.h index 3cbfa93cd782..1fe731337f07 100644 --- a/fs/hostfs/hostfs.h +++ b/fs/hostfs/hostfs.h | |||
@@ -67,7 +67,8 @@ extern int access_file(char *path, int r, int w, int x); | |||
67 | extern int open_file(char *path, int r, int w, int append); | 67 | extern int open_file(char *path, int r, int w, int append); |
68 | extern void *open_dir(char *path, int *err_out); | 68 | extern void *open_dir(char *path, int *err_out); |
69 | extern char *read_dir(void *stream, unsigned long long *pos, | 69 | extern char *read_dir(void *stream, unsigned long long *pos, |
70 | unsigned long long *ino_out, int *len_out); | 70 | unsigned long long *ino_out, int *len_out, |
71 | unsigned int *type_out); | ||
71 | extern void close_file(void *stream); | 72 | extern void close_file(void *stream); |
72 | extern int replace_file(int oldfd, int fd); | 73 | extern int replace_file(int oldfd, int fd); |
73 | extern void close_dir(void *stream); | 74 | extern void close_dir(void *stream); |
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 588d45885a6f..07c516bfea76 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -283,6 +283,7 @@ int hostfs_readdir(struct file *file, void *ent, filldir_t filldir) | |||
283 | char *name; | 283 | char *name; |
284 | unsigned long long next, ino; | 284 | unsigned long long next, ino; |
285 | int error, len; | 285 | int error, len; |
286 | unsigned int type; | ||
286 | 287 | ||
287 | name = dentry_name(file->f_path.dentry); | 288 | name = dentry_name(file->f_path.dentry); |
288 | if (name == NULL) | 289 | if (name == NULL) |
@@ -292,9 +293,9 @@ int hostfs_readdir(struct file *file, void *ent, filldir_t filldir) | |||
292 | if (dir == NULL) | 293 | if (dir == NULL) |
293 | return -error; | 294 | return -error; |
294 | next = file->f_pos; | 295 | next = file->f_pos; |
295 | while ((name = read_dir(dir, &next, &ino, &len)) != NULL) { | 296 | while ((name = read_dir(dir, &next, &ino, &len, &type)) != NULL) { |
296 | error = (*filldir)(ent, name, len, file->f_pos, | 297 | error = (*filldir)(ent, name, len, file->f_pos, |
297 | ino, DT_UNKNOWN); | 298 | ino, type); |
298 | if (error) break; | 299 | if (error) break; |
299 | file->f_pos = next; | 300 | file->f_pos = next; |
300 | } | 301 | } |
diff --git a/fs/hostfs/hostfs_user.c b/fs/hostfs/hostfs_user.c index dd7bc38a3825..a74ad0d371c2 100644 --- a/fs/hostfs/hostfs_user.c +++ b/fs/hostfs/hostfs_user.c | |||
@@ -98,7 +98,8 @@ void *open_dir(char *path, int *err_out) | |||
98 | } | 98 | } |
99 | 99 | ||
100 | char *read_dir(void *stream, unsigned long long *pos, | 100 | char *read_dir(void *stream, unsigned long long *pos, |
101 | unsigned long long *ino_out, int *len_out) | 101 | unsigned long long *ino_out, int *len_out, |
102 | unsigned int *type_out) | ||
102 | { | 103 | { |
103 | DIR *dir = stream; | 104 | DIR *dir = stream; |
104 | struct dirent *ent; | 105 | struct dirent *ent; |
@@ -109,6 +110,7 @@ char *read_dir(void *stream, unsigned long long *pos, | |||
109 | return NULL; | 110 | return NULL; |
110 | *len_out = strlen(ent->d_name); | 111 | *len_out = strlen(ent->d_name); |
111 | *ino_out = ent->d_ino; | 112 | *ino_out = ent->d_ino; |
113 | *type_out = ent->d_type; | ||
112 | *pos = telldir(dir); | 114 | *pos = telldir(dir); |
113 | return ent->d_name; | 115 | return ent->d_name; |
114 | } | 116 | } |
diff --git a/lib/Kconfig b/lib/Kconfig index 43359bb1ca90..a0e5900a9d85 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -29,6 +29,10 @@ config GENERIC_IOMAP | |||
29 | bool | 29 | bool |
30 | select GENERIC_PCI_IOMAP | 30 | select GENERIC_PCI_IOMAP |
31 | 31 | ||
32 | config GENERIC_IO | ||
33 | boolean | ||
34 | default n | ||
35 | |||
32 | config CRC_CCITT | 36 | config CRC_CCITT |
33 | tristate "CRC-CCITT functions" | 37 | tristate "CRC-CCITT functions" |
34 | help | 38 | help |
@@ -277,6 +281,7 @@ config BTREE | |||
277 | config HAS_IOMEM | 281 | config HAS_IOMEM |
278 | boolean | 282 | boolean |
279 | depends on !NO_IOMEM | 283 | depends on !NO_IOMEM |
284 | select GENERIC_IO | ||
280 | default y | 285 | default y |
281 | 286 | ||
282 | config HAS_IOPORT | 287 | config HAS_IOPORT |