diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-12 17:52:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-12 17:52:13 -0400 |
commit | 983dfa4b6ee556563f7963348e4e2f97fc8a15b8 (patch) | |
tree | 394ca60456f251e0308cf55816407261b1bd39d2 /arch/um | |
parent | 47782361aca21a32ad4198f1b72f1655a7c9f7e5 (diff) | |
parent | 1987b1b8f9f17a06255877e7917d0bb5b5377774 (diff) |
Merge tag 'for-linus-5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/rw/uml
Pull UML updates from Richard Weinberger:
- Kconfig cleanups
- Fix cpu_all_mask() usage
- Various bug fixes
* tag 'for-linus-5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/rw/uml:
um: irq: don't set the chip for all irqs
um: define set_pte_at() as a static inline function, not a macro
um: remove uses of variable length arrays
um: remove unused variable
uml: fix a boot splat wrt use of cpu_all_mask
um: Do not unlock mutex that is not hold.
hostfs: fix mismatch between link_file definition and declaration
arch: um: drivers: Kconfig: pedantic formatting
arch: um: Kconfig: pedantic indention cleanups
um: Revert to using stack for pt_regs in signal handling
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/Kconfig | 58 | ||||
-rw-r--r-- | arch/um/drivers/Kconfig | 352 | ||||
-rw-r--r-- | arch/um/drivers/ubd_kern.c | 4 | ||||
-rw-r--r-- | arch/um/include/asm/pgtable.h | 7 | ||||
-rw-r--r-- | arch/um/kernel/irq.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/skas/uaccess.c | 1 | ||||
-rw-r--r-- | arch/um/kernel/time.c | 2 | ||||
-rw-r--r-- | arch/um/os-Linux/signal.c | 28 | ||||
-rw-r--r-- | arch/um/os-Linux/umid.c | 36 |
9 files changed, 252 insertions, 238 deletions
diff --git a/arch/um/Kconfig b/arch/um/Kconfig index ec9711d068b7..6b6eb938fcc1 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig | |||
@@ -80,46 +80,46 @@ config LD_SCRIPT_DYN | |||
80 | bool | 80 | bool |
81 | default y | 81 | default y |
82 | depends on !LD_SCRIPT_STATIC | 82 | depends on !LD_SCRIPT_STATIC |
83 | select MODULE_REL_CRCS if MODVERSIONS | 83 | select MODULE_REL_CRCS if MODVERSIONS |
84 | 84 | ||
85 | config HOSTFS | 85 | config HOSTFS |
86 | tristate "Host filesystem" | 86 | tristate "Host filesystem" |
87 | help | 87 | help |
88 | While the User-Mode Linux port uses its own root file system for | 88 | While the User-Mode Linux port uses its own root file system for |
89 | booting and normal file access, this module lets the UML user | 89 | booting and normal file access, this module lets the UML user |
90 | access files stored on the host. It does not require any | 90 | access files stored on the host. It does not require any |
91 | network connection between the Host and UML. An example use of | 91 | network connection between the Host and UML. An example use of |
92 | this might be: | 92 | this might be: |
93 | 93 | ||
94 | mount none /tmp/fromhost -t hostfs -o /tmp/umlshare | 94 | mount none /tmp/fromhost -t hostfs -o /tmp/umlshare |
95 | 95 | ||
96 | where /tmp/fromhost is an empty directory inside UML and | 96 | where /tmp/fromhost is an empty directory inside UML and |
97 | /tmp/umlshare is a directory on the host with files the UML user | 97 | /tmp/umlshare is a directory on the host with files the UML user |
98 | wishes to access. | 98 | wishes to access. |
99 | 99 | ||
100 | For more information, see | 100 | For more information, see |
101 | <http://user-mode-linux.sourceforge.net/hostfs.html>. | 101 | <http://user-mode-linux.sourceforge.net/hostfs.html>. |
102 | 102 | ||
103 | If you'd like to be able to work with files stored on the host, | 103 | If you'd like to be able to work with files stored on the host, |
104 | say Y or M here; otherwise say N. | 104 | say Y or M here; otherwise say N. |
105 | 105 | ||
106 | config MCONSOLE | 106 | config MCONSOLE |
107 | bool "Management console" | 107 | bool "Management console" |
108 | depends on PROC_FS | 108 | depends on PROC_FS |
109 | default y | 109 | default y |
110 | help | 110 | help |
111 | The user mode linux management console is a low-level interface to | 111 | The user mode linux management console is a low-level interface to |
112 | the kernel, somewhat like the i386 SysRq interface. Since there is | 112 | the kernel, somewhat like the i386 SysRq interface. Since there is |
113 | a full-blown operating system running under every user mode linux | 113 | a full-blown operating system running under every user mode linux |
114 | instance, there is much greater flexibility possible than with the | 114 | instance, there is much greater flexibility possible than with the |
115 | SysRq mechanism. | 115 | SysRq mechanism. |
116 | 116 | ||
117 | If you answer 'Y' to this option, to use this feature, you need the | 117 | If you answer 'Y' to this option, to use this feature, you need the |
118 | mconsole client (called uml_mconsole) which is present in CVS in | 118 | mconsole client (called uml_mconsole) which is present in CVS in |
119 | 2.4.5-9um and later (path /tools/mconsole), and is also in the | 119 | 2.4.5-9um and later (path /tools/mconsole), and is also in the |
120 | distribution RPM package in 2.4.6 and later. | 120 | distribution RPM package in 2.4.6 and later. |
121 | 121 | ||
122 | It is safe to say 'Y' here. | 122 | It is safe to say 'Y' here. |
123 | 123 | ||
124 | config MAGIC_SYSRQ | 124 | config MAGIC_SYSRQ |
125 | bool "Magic SysRq key" | 125 | bool "Magic SysRq key" |
@@ -142,13 +142,17 @@ config MAGIC_SYSRQ | |||
142 | 142 | ||
143 | config KERNEL_STACK_ORDER | 143 | config KERNEL_STACK_ORDER |
144 | int "Kernel stack size order" | 144 | int "Kernel stack size order" |
145 | default 1 if 64BIT | 145 | default 2 if 64BIT |
146 | range 1 10 if 64BIT | 146 | range 2 10 if 64BIT |
147 | default 0 if !64BIT | 147 | default 1 if !64BIT |
148 | help | 148 | help |
149 | This option determines the size of UML kernel stacks. They will | 149 | This option determines the size of UML kernel stacks. They will |
150 | be 1 << order pages. The default is OK unless you're running Valgrind | 150 | be 1 << order pages. The default is OK unless you're running Valgrind |
151 | on UML, in which case, set this to 3. | 151 | on UML, in which case, set this to 3. |
152 | It is possible to reduce the stack to 1 for 64BIT and 0 for 32BIT on | ||
153 | older (pre-2017) CPUs. It is not recommended on newer CPUs due to the | ||
154 | increase in the size of the state which needs to be saved when handling | ||
155 | signals. | ||
152 | 156 | ||
153 | config MMAPPER | 157 | config MMAPPER |
154 | tristate "iomem emulation driver" | 158 | tristate "iomem emulation driver" |
diff --git a/arch/um/drivers/Kconfig b/arch/um/drivers/Kconfig index 2b1aaf7755aa..2638e46f50cc 100644 --- a/arch/um/drivers/Kconfig +++ b/arch/um/drivers/Kconfig | |||
@@ -11,58 +11,58 @@ config STDERR_CONSOLE | |||
11 | config SSL | 11 | config SSL |
12 | bool "Virtual serial line" | 12 | bool "Virtual serial line" |
13 | help | 13 | help |
14 | The User-Mode Linux environment allows you to create virtual serial | 14 | The User-Mode Linux environment allows you to create virtual serial |
15 | lines on the UML that are usually made to show up on the host as | 15 | lines on the UML that are usually made to show up on the host as |
16 | ttys or ptys. | 16 | ttys or ptys. |
17 | 17 | ||
18 | See <http://user-mode-linux.sourceforge.net/old/input.html> for more | 18 | See <http://user-mode-linux.sourceforge.net/old/input.html> for more |
19 | information and command line examples of how to use this facility. | 19 | information and command line examples of how to use this facility. |
20 | 20 | ||
21 | Unless you have a specific reason for disabling this, say Y. | 21 | Unless you have a specific reason for disabling this, say Y. |
22 | 22 | ||
23 | config NULL_CHAN | 23 | config NULL_CHAN |
24 | bool "null channel support" | 24 | bool "null channel support" |
25 | help | 25 | help |
26 | This option enables support for attaching UML consoles and serial | 26 | This option enables support for attaching UML consoles and serial |
27 | lines to a device similar to /dev/null. Data written to it disappears | 27 | lines to a device similar to /dev/null. Data written to it disappears |
28 | and there is never any data to be read. | 28 | and there is never any data to be read. |
29 | 29 | ||
30 | config PORT_CHAN | 30 | config PORT_CHAN |
31 | bool "port channel support" | 31 | bool "port channel support" |
32 | help | 32 | help |
33 | This option enables support for attaching UML consoles and serial | 33 | This option enables support for attaching UML consoles and serial |
34 | lines to host portals. They may be accessed with 'telnet <host> | 34 | lines to host portals. They may be accessed with 'telnet <host> |
35 | <port number>'. Any number of consoles and serial lines may be | 35 | <port number>'. Any number of consoles and serial lines may be |
36 | attached to a single portal, although what UML device you get when | 36 | attached to a single portal, although what UML device you get when |
37 | you telnet to that portal will be unpredictable. | 37 | you telnet to that portal will be unpredictable. |
38 | It is safe to say 'Y' here. | 38 | It is safe to say 'Y' here. |
39 | 39 | ||
40 | config PTY_CHAN | 40 | config PTY_CHAN |
41 | bool "pty channel support" | 41 | bool "pty channel support" |
42 | help | 42 | help |
43 | This option enables support for attaching UML consoles and serial | 43 | This option enables support for attaching UML consoles and serial |
44 | lines to host pseudo-terminals. Access to both traditional | 44 | lines to host pseudo-terminals. Access to both traditional |
45 | pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled | 45 | pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled |
46 | with this option. The assignment of UML devices to host devices | 46 | with this option. The assignment of UML devices to host devices |
47 | will be announced in the kernel message log. | 47 | will be announced in the kernel message log. |
48 | It is safe to say 'Y' here. | 48 | It is safe to say 'Y' here. |
49 | 49 | ||
50 | config TTY_CHAN | 50 | config TTY_CHAN |
51 | bool "tty channel support" | 51 | bool "tty channel support" |
52 | help | 52 | help |
53 | This option enables support for attaching UML consoles and serial | 53 | This option enables support for attaching UML consoles and serial |
54 | lines to host terminals. Access to both virtual consoles | 54 | lines to host terminals. Access to both virtual consoles |
55 | (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and | 55 | (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and |
56 | /dev/pts/*) are controlled by this option. | 56 | /dev/pts/*) are controlled by this option. |
57 | It is safe to say 'Y' here. | 57 | It is safe to say 'Y' here. |
58 | 58 | ||
59 | config XTERM_CHAN | 59 | config XTERM_CHAN |
60 | bool "xterm channel support" | 60 | bool "xterm channel support" |
61 | help | 61 | help |
62 | This option enables support for attaching UML consoles and serial | 62 | This option enables support for attaching UML consoles and serial |
63 | lines to xterms. Each UML device so assigned will be brought up in | 63 | lines to xterms. Each UML device so assigned will be brought up in |
64 | its own xterm. | 64 | its own xterm. |
65 | It is safe to say 'Y' here. | 65 | It is safe to say 'Y' here. |
66 | 66 | ||
67 | config NOCONFIG_CHAN | 67 | config NOCONFIG_CHAN |
68 | bool | 68 | bool |
@@ -72,43 +72,43 @@ config CON_ZERO_CHAN | |||
72 | string "Default main console channel initialization" | 72 | string "Default main console channel initialization" |
73 | default "fd:0,fd:1" | 73 | default "fd:0,fd:1" |
74 | help | 74 | help |
75 | This is the string describing the channel to which the main console | 75 | This is the string describing the channel to which the main console |
76 | will be attached by default. This value can be overridden from the | 76 | will be attached by default. This value can be overridden from the |
77 | command line. The default value is "fd:0,fd:1", which attaches the | 77 | command line. The default value is "fd:0,fd:1", which attaches the |
78 | main console to stdin and stdout. | 78 | main console to stdin and stdout. |
79 | It is safe to leave this unchanged. | 79 | It is safe to leave this unchanged. |
80 | 80 | ||
81 | config CON_CHAN | 81 | config CON_CHAN |
82 | string "Default console channel initialization" | 82 | string "Default console channel initialization" |
83 | default "xterm" | 83 | default "xterm" |
84 | help | 84 | help |
85 | This is the string describing the channel to which all consoles | 85 | This is the string describing the channel to which all consoles |
86 | except the main console will be attached by default. This value can | 86 | except the main console will be attached by default. This value can |
87 | be overridden from the command line. The default value is "xterm", | 87 | be overridden from the command line. The default value is "xterm", |
88 | which brings them up in xterms. | 88 | which brings them up in xterms. |
89 | It is safe to leave this unchanged, although you may wish to change | 89 | It is safe to leave this unchanged, although you may wish to change |
90 | this if you expect the UML that you build to be run in environments | 90 | this if you expect the UML that you build to be run in environments |
91 | which don't have X or xterm available. | 91 | which don't have X or xterm available. |
92 | 92 | ||
93 | config SSL_CHAN | 93 | config SSL_CHAN |
94 | string "Default serial line channel initialization" | 94 | string "Default serial line channel initialization" |
95 | default "pty" | 95 | default "pty" |
96 | help | 96 | help |
97 | This is the string describing the channel to which the serial lines | 97 | This is the string describing the channel to which the serial lines |
98 | will be attached by default. This value can be overridden from the | 98 | will be attached by default. This value can be overridden from the |
99 | command line. The default value is "pty", which attaches them to | 99 | command line. The default value is "pty", which attaches them to |
100 | traditional pseudo-terminals. | 100 | traditional pseudo-terminals. |
101 | It is safe to leave this unchanged, although you may wish to change | 101 | It is safe to leave this unchanged, although you may wish to change |
102 | this if you expect the UML that you build to be run in environments | 102 | this if you expect the UML that you build to be run in environments |
103 | which don't have a set of /dev/pty* devices. | 103 | which don't have a set of /dev/pty* devices. |
104 | 104 | ||
105 | config UML_SOUND | 105 | config UML_SOUND |
106 | tristate "Sound support" | 106 | tristate "Sound support" |
107 | help | 107 | help |
108 | This option enables UML sound support. If enabled, it will pull in | 108 | This option enables UML sound support. If enabled, it will pull in |
109 | soundcore and the UML hostaudio relay, which acts as a intermediary | 109 | soundcore and the UML hostaudio relay, which acts as a intermediary |
110 | between the host's dsp and mixer devices and the UML sound system. | 110 | between the host's dsp and mixer devices and the UML sound system. |
111 | It is safe to say 'Y' here. | 111 | It is safe to say 'Y' here. |
112 | 112 | ||
113 | config SOUND | 113 | config SOUND |
114 | tristate | 114 | tristate |
@@ -131,107 +131,107 @@ menu "UML Network Devices" | |||
131 | config UML_NET | 131 | config UML_NET |
132 | bool "Virtual network device" | 132 | bool "Virtual network device" |
133 | help | 133 | help |
134 | While the User-Mode port cannot directly talk to any physical | 134 | While the User-Mode port cannot directly talk to any physical |
135 | hardware devices, this choice and the following transport options | 135 | hardware devices, this choice and the following transport options |
136 | provide one or more virtual network devices through which the UML | 136 | provide one or more virtual network devices through which the UML |
137 | kernels can talk to each other, the host, and with the host's help, | 137 | kernels can talk to each other, the host, and with the host's help, |
138 | machines on the outside world. | 138 | machines on the outside world. |
139 | 139 | ||
140 | For more information, including explanations of the networking and | 140 | For more information, including explanations of the networking and |
141 | sample configurations, see | 141 | sample configurations, see |
142 | <http://user-mode-linux.sourceforge.net/old/networking.html>. | 142 | <http://user-mode-linux.sourceforge.net/old/networking.html>. |
143 | 143 | ||
144 | If you'd like to be able to enable networking in the User-Mode | 144 | If you'd like to be able to enable networking in the User-Mode |
145 | linux environment, say Y; otherwise say N. Note that you must | 145 | linux environment, say Y; otherwise say N. Note that you must |
146 | enable at least one of the following transport options to actually | 146 | enable at least one of the following transport options to actually |
147 | make use of UML networking. | 147 | make use of UML networking. |
148 | 148 | ||
149 | config UML_NET_ETHERTAP | 149 | config UML_NET_ETHERTAP |
150 | bool "Ethertap transport" | 150 | bool "Ethertap transport" |
151 | depends on UML_NET | 151 | depends on UML_NET |
152 | help | 152 | help |
153 | The Ethertap User-Mode Linux network transport allows a single | 153 | The Ethertap User-Mode Linux network transport allows a single |
154 | running UML to exchange packets with its host over one of the | 154 | running UML to exchange packets with its host over one of the |
155 | host's Ethertap devices, such as /dev/tap0. Additional running | 155 | host's Ethertap devices, such as /dev/tap0. Additional running |
156 | UMLs can use additional Ethertap devices, one per running UML. | 156 | UMLs can use additional Ethertap devices, one per running UML. |
157 | While the UML believes it's on a (multi-device, broadcast) virtual | 157 | While the UML believes it's on a (multi-device, broadcast) virtual |
158 | Ethernet network, it's in fact communicating over a point-to-point | 158 | Ethernet network, it's in fact communicating over a point-to-point |
159 | link with the host. | 159 | link with the host. |
160 | 160 | ||
161 | To use this, your host kernel must have support for Ethertap | 161 | To use this, your host kernel must have support for Ethertap |
162 | devices. Also, if your host kernel is 2.4.x, it must have | 162 | devices. Also, if your host kernel is 2.4.x, it must have |
163 | CONFIG_NETLINK_DEV configured as Y or M. | 163 | CONFIG_NETLINK_DEV configured as Y or M. |
164 | 164 | ||
165 | For more information, see | 165 | For more information, see |
166 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 166 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
167 | has examples of the UML command line to use to enable Ethertap | 167 | has examples of the UML command line to use to enable Ethertap |
168 | networking. | 168 | networking. |
169 | 169 | ||
170 | If you'd like to set up an IP network with the host and/or the | 170 | If you'd like to set up an IP network with the host and/or the |
171 | outside world, say Y to this, the Daemon Transport and/or the | 171 | outside world, say Y to this, the Daemon Transport and/or the |
172 | Slip Transport. You'll need at least one of them, but may choose | 172 | Slip Transport. You'll need at least one of them, but may choose |
173 | more than one without conflict. If you don't need UML networking, | 173 | more than one without conflict. If you don't need UML networking, |
174 | say N. | 174 | say N. |
175 | 175 | ||
176 | config UML_NET_TUNTAP | 176 | config UML_NET_TUNTAP |
177 | bool "TUN/TAP transport" | 177 | bool "TUN/TAP transport" |
178 | depends on UML_NET | 178 | depends on UML_NET |
179 | help | 179 | help |
180 | The UML TUN/TAP network transport allows a UML instance to exchange | 180 | The UML TUN/TAP network transport allows a UML instance to exchange |
181 | packets with the host over a TUN/TAP device. This option will only | 181 | packets with the host over a TUN/TAP device. This option will only |
182 | work with a 2.4 host, unless you've applied the TUN/TAP patch to | 182 | work with a 2.4 host, unless you've applied the TUN/TAP patch to |
183 | your 2.2 host kernel. | 183 | your 2.2 host kernel. |
184 | 184 | ||
185 | To use this transport, your host kernel must have support for TUN/TAP | 185 | To use this transport, your host kernel must have support for TUN/TAP |
186 | devices, either built-in or as a module. | 186 | devices, either built-in or as a module. |
187 | 187 | ||
188 | config UML_NET_SLIP | 188 | config UML_NET_SLIP |
189 | bool "SLIP transport" | 189 | bool "SLIP transport" |
190 | depends on UML_NET | 190 | depends on UML_NET |
191 | help | 191 | help |
192 | The slip User-Mode Linux network transport allows a running UML to | 192 | The slip User-Mode Linux network transport allows a running UML to |
193 | network with its host over a point-to-point link. Unlike Ethertap, | 193 | network with its host over a point-to-point link. Unlike Ethertap, |
194 | which can carry any Ethernet frame (and hence even non-IP packets), | 194 | which can carry any Ethernet frame (and hence even non-IP packets), |
195 | the slip transport can only carry IP packets. | 195 | the slip transport can only carry IP packets. |
196 | 196 | ||
197 | To use this, your host must support slip devices. | 197 | To use this, your host must support slip devices. |
198 | 198 | ||
199 | For more information, see | 199 | For more information, see |
200 | <http://user-mode-linux.sourceforge.net/old/networking.html>. | 200 | <http://user-mode-linux.sourceforge.net/old/networking.html>. |
201 | has examples of the UML command line to use to enable slip | 201 | has examples of the UML command line to use to enable slip |
202 | networking, and details of a few quirks with it. | 202 | networking, and details of a few quirks with it. |
203 | 203 | ||
204 | The Ethertap Transport is preferred over slip because of its | 204 | The Ethertap Transport is preferred over slip because of its |
205 | limitations. If you prefer slip, however, say Y here. Otherwise | 205 | limitations. If you prefer slip, however, say Y here. Otherwise |
206 | choose the Multicast transport (to network multiple UMLs on | 206 | choose the Multicast transport (to network multiple UMLs on |
207 | multiple hosts), Ethertap (to network with the host and the | 207 | multiple hosts), Ethertap (to network with the host and the |
208 | outside world), and/or the Daemon transport (to network multiple | 208 | outside world), and/or the Daemon transport (to network multiple |
209 | UMLs on a single host). You may choose more than one without | 209 | UMLs on a single host). You may choose more than one without |
210 | conflict. If you don't need UML networking, say N. | 210 | conflict. If you don't need UML networking, say N. |
211 | 211 | ||
212 | config UML_NET_DAEMON | 212 | config UML_NET_DAEMON |
213 | bool "Daemon transport" | 213 | bool "Daemon transport" |
214 | depends on UML_NET | 214 | depends on UML_NET |
215 | help | 215 | help |
216 | This User-Mode Linux network transport allows one or more running | 216 | This User-Mode Linux network transport allows one or more running |
217 | UMLs on a single host to communicate with each other, but not to | 217 | UMLs on a single host to communicate with each other, but not to |
218 | the host. | 218 | the host. |
219 | 219 | ||
220 | To use this form of networking, you'll need to run the UML | 220 | To use this form of networking, you'll need to run the UML |
221 | networking daemon on the host. | 221 | networking daemon on the host. |
222 | 222 | ||
223 | For more information, see | 223 | For more information, see |
224 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 224 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
225 | has examples of the UML command line to use to enable Daemon | 225 | has examples of the UML command line to use to enable Daemon |
226 | networking. | 226 | networking. |
227 | 227 | ||
228 | If you'd like to set up a network with other UMLs on a single host, | 228 | If you'd like to set up a network with other UMLs on a single host, |
229 | say Y. If you need a network between UMLs on multiple physical | 229 | say Y. If you need a network between UMLs on multiple physical |
230 | hosts, choose the Multicast Transport. To set up a network with | 230 | hosts, choose the Multicast Transport. To set up a network with |
231 | the host and/or other IP machines, say Y to the Ethertap or Slip | 231 | the host and/or other IP machines, say Y to the Ethertap or Slip |
232 | transports. You'll need at least one of them, but may choose | 232 | transports. You'll need at least one of them, but may choose |
233 | more than one without conflict. If you don't need UML networking, | 233 | more than one without conflict. If you don't need UML networking, |
234 | say N. | 234 | say N. |
235 | 235 | ||
236 | config UML_NET_VECTOR | 236 | config UML_NET_VECTOR |
237 | bool "Vector I/O high performance network devices" | 237 | bool "Vector I/O high performance network devices" |
@@ -270,26 +270,26 @@ config UML_NET_MCAST | |||
270 | bool "Multicast transport" | 270 | bool "Multicast transport" |
271 | depends on UML_NET | 271 | depends on UML_NET |
272 | help | 272 | help |
273 | This Multicast User-Mode Linux network transport allows multiple | 273 | This Multicast User-Mode Linux network transport allows multiple |
274 | UMLs (even ones running on different host machines!) to talk to | 274 | UMLs (even ones running on different host machines!) to talk to |
275 | each other over a virtual ethernet network. However, it requires | 275 | each other over a virtual ethernet network. However, it requires |
276 | at least one UML with one of the other transports to act as a | 276 | at least one UML with one of the other transports to act as a |
277 | bridge if any of them need to be able to talk to their hosts or any | 277 | bridge if any of them need to be able to talk to their hosts or any |
278 | other IP machines. | 278 | other IP machines. |
279 | 279 | ||
280 | To use this, your host kernel(s) must support IP Multicasting. | 280 | To use this, your host kernel(s) must support IP Multicasting. |
281 | 281 | ||
282 | For more information, see | 282 | For more information, see |
283 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 283 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
284 | has examples of the UML command line to use to enable Multicast | 284 | has examples of the UML command line to use to enable Multicast |
285 | networking, and notes about the security of this approach. | 285 | networking, and notes about the security of this approach. |
286 | 286 | ||
287 | If you need UMLs on multiple physical hosts to communicate as if | 287 | If you need UMLs on multiple physical hosts to communicate as if |
288 | they shared an Ethernet network, say Y. If you need to communicate | 288 | they shared an Ethernet network, say Y. If you need to communicate |
289 | with other IP machines, make sure you select one of the other | 289 | with other IP machines, make sure you select one of the other |
290 | transports (possibly in addition to Multicast; they're not | 290 | transports (possibly in addition to Multicast; they're not |
291 | exclusive). If you don't need to network UMLs say N to each of | 291 | exclusive). If you don't need to network UMLs say N to each of |
292 | the transports. | 292 | the transports. |
293 | 293 | ||
294 | config UML_NET_PCAP | 294 | config UML_NET_PCAP |
295 | bool "pcap transport" | 295 | bool "pcap transport" |
@@ -300,9 +300,9 @@ config UML_NET_PCAP | |||
300 | UML act as a network monitor for the host. You must have libcap | 300 | UML act as a network monitor for the host. You must have libcap |
301 | installed in order to build the pcap transport into UML. | 301 | installed in order to build the pcap transport into UML. |
302 | 302 | ||
303 | For more information, see | 303 | For more information, see |
304 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site | 304 | <http://user-mode-linux.sourceforge.net/old/networking.html> That site |
305 | has examples of the UML command line to use to enable this option. | 305 | has examples of the UML command line to use to enable this option. |
306 | 306 | ||
307 | If you intend to use UML as a network monitor for the host, say | 307 | If you intend to use UML as a network monitor for the host, say |
308 | Y here. Otherwise, say N. | 308 | Y here. Otherwise, say N. |
@@ -311,27 +311,27 @@ config UML_NET_SLIRP | |||
311 | bool "SLiRP transport" | 311 | bool "SLiRP transport" |
312 | depends on UML_NET | 312 | depends on UML_NET |
313 | help | 313 | help |
314 | The SLiRP User-Mode Linux network transport allows a running UML | 314 | The SLiRP User-Mode Linux network transport allows a running UML |
315 | to network by invoking a program that can handle SLIP encapsulated | 315 | to network by invoking a program that can handle SLIP encapsulated |
316 | packets. This is commonly (but not limited to) the application | 316 | packets. This is commonly (but not limited to) the application |
317 | known as SLiRP, a program that can re-socket IP packets back onto | 317 | known as SLiRP, a program that can re-socket IP packets back onto |
318 | the host on which it is run. Only IP packets are supported, | 318 | he host on which it is run. Only IP packets are supported, |
319 | unlike other network transports that can handle all Ethernet | 319 | unlike other network transports that can handle all Ethernet |
320 | frames. In general, slirp allows the UML the same IP connectivity | 320 | frames. In general, slirp allows the UML the same IP connectivity |
321 | to the outside world that the host user is permitted, and unlike | 321 | to the outside world that the host user is permitted, and unlike |
322 | other transports, SLiRP works without the need of root level | 322 | other transports, SLiRP works without the need of root level |
323 | privleges, setuid binaries, or SLIP devices on the host. This | 323 | privleges, setuid binaries, or SLIP devices on the host. This |
324 | also means not every type of connection is possible, but most | 324 | also means not every type of connection is possible, but most |
325 | situations can be accommodated with carefully crafted slirp | 325 | situations can be accommodated with carefully crafted slirp |
326 | commands that can be passed along as part of the network device's | 326 | commands that can be passed along as part of the network device's |
327 | setup string. The effect of this transport on the UML is similar | 327 | setup string. The effect of this transport on the UML is similar |
328 | that of a host behind a firewall that masquerades all network | 328 | that of a host behind a firewall that masquerades all network |
329 | connections passing through it (but is less secure). | 329 | connections passing through it (but is less secure). |
330 | 330 | ||
331 | To use this you should first have slirp compiled somewhere | 331 | To use this you should first have slirp compiled somewhere |
332 | accessible on the host, and have read its documentation. If you | 332 | accessible on the host, and have read its documentation. If you |
333 | don't need UML networking, say N. | 333 | don't need UML networking, say N. |
334 | 334 | ||
335 | Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp" | 335 | Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp" |
336 | 336 | ||
337 | endmenu | 337 | endmenu |
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index aca09be2373e..33c1cd6a12ac 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -276,14 +276,14 @@ static int ubd_setup_common(char *str, int *index_out, char **error_out) | |||
276 | str++; | 276 | str++; |
277 | if(!strcmp(str, "sync")){ | 277 | if(!strcmp(str, "sync")){ |
278 | global_openflags = of_sync(global_openflags); | 278 | global_openflags = of_sync(global_openflags); |
279 | goto out1; | 279 | return err; |
280 | } | 280 | } |
281 | 281 | ||
282 | err = -EINVAL; | 282 | err = -EINVAL; |
283 | major = simple_strtoul(str, &end, 0); | 283 | major = simple_strtoul(str, &end, 0); |
284 | if((*end != '\0') || (end == str)){ | 284 | if((*end != '\0') || (end == str)){ |
285 | *error_out = "Didn't parse major number"; | 285 | *error_out = "Didn't parse major number"; |
286 | goto out1; | 286 | return err; |
287 | } | 287 | } |
288 | 288 | ||
289 | mutex_lock(&ubd_lock); | 289 | mutex_lock(&ubd_lock); |
diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index 9c04562310b3..b377df76cc28 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h | |||
@@ -263,7 +263,12 @@ static inline void set_pte(pte_t *pteptr, pte_t pteval) | |||
263 | *pteptr = pte_mknewpage(*pteptr); | 263 | *pteptr = pte_mknewpage(*pteptr); |
264 | if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr); | 264 | if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr); |
265 | } | 265 | } |
266 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | 266 | |
267 | static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | ||
268 | pte_t *pteptr, pte_t pteval) | ||
269 | { | ||
270 | set_pte(pteptr, pteval); | ||
271 | } | ||
267 | 272 | ||
268 | #define __HAVE_ARCH_PTE_SAME | 273 | #define __HAVE_ARCH_PTE_SAME |
269 | static inline int pte_same(pte_t pte_a, pte_t pte_b) | 274 | static inline int pte_same(pte_t pte_a, pte_t pte_b) |
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index f4874b7ec503..598d7b3d9355 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
@@ -479,7 +479,7 @@ void __init init_IRQ(void) | |||
479 | irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); | 479 | irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); |
480 | 480 | ||
481 | 481 | ||
482 | for (i = 1; i < NR_IRQS; i++) | 482 | for (i = 1; i < LAST_IRQ; i++) |
483 | irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq); | 483 | irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq); |
484 | /* Initialize EPOLL Loop */ | 484 | /* Initialize EPOLL Loop */ |
485 | os_setup_epoll(); | 485 | os_setup_epoll(); |
diff --git a/arch/um/kernel/skas/uaccess.c b/arch/um/kernel/skas/uaccess.c index 7f06fdbc7ee1..bd3cb694322c 100644 --- a/arch/um/kernel/skas/uaccess.c +++ b/arch/um/kernel/skas/uaccess.c | |||
@@ -59,7 +59,6 @@ static pte_t *maybe_map(unsigned long virt, int is_write) | |||
59 | static int do_op_one_page(unsigned long addr, int len, int is_write, | 59 | static int do_op_one_page(unsigned long addr, int len, int is_write, |
60 | int (*op)(unsigned long addr, int len, void *arg), void *arg) | 60 | int (*op)(unsigned long addr, int len, void *arg), void *arg) |
61 | { | 61 | { |
62 | jmp_buf buf; | ||
63 | struct page *page; | 62 | struct page *page; |
64 | pte_t *pte; | 63 | pte_t *pte; |
65 | int n; | 64 | int n; |
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index 052de4c8acb2..0c572a48158e 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -56,7 +56,7 @@ static int itimer_one_shot(struct clock_event_device *evt) | |||
56 | static struct clock_event_device timer_clockevent = { | 56 | static struct clock_event_device timer_clockevent = { |
57 | .name = "posix-timer", | 57 | .name = "posix-timer", |
58 | .rating = 250, | 58 | .rating = 250, |
59 | .cpumask = cpu_all_mask, | 59 | .cpumask = cpu_possible_mask, |
60 | .features = CLOCK_EVT_FEAT_PERIODIC | | 60 | .features = CLOCK_EVT_FEAT_PERIODIC | |
61 | CLOCK_EVT_FEAT_ONESHOT, | 61 | CLOCK_EVT_FEAT_ONESHOT, |
62 | .set_state_shutdown = itimer_shutdown, | 62 | .set_state_shutdown = itimer_shutdown, |
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index bf0acb8aad8b..75b10235d369 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c | |||
@@ -31,29 +31,23 @@ void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = { | |||
31 | 31 | ||
32 | static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc) | 32 | static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc) |
33 | { | 33 | { |
34 | struct uml_pt_regs *r; | 34 | struct uml_pt_regs r; |
35 | int save_errno = errno; | 35 | int save_errno = errno; |
36 | 36 | ||
37 | r = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC); | 37 | r.is_user = 0; |
38 | if (!r) | ||
39 | panic("out of memory"); | ||
40 | |||
41 | r->is_user = 0; | ||
42 | if (sig == SIGSEGV) { | 38 | if (sig == SIGSEGV) { |
43 | /* For segfaults, we want the data from the sigcontext. */ | 39 | /* For segfaults, we want the data from the sigcontext. */ |
44 | get_regs_from_mc(r, mc); | 40 | get_regs_from_mc(&r, mc); |
45 | GET_FAULTINFO_FROM_MC(r->faultinfo, mc); | 41 | GET_FAULTINFO_FROM_MC(r.faultinfo, mc); |
46 | } | 42 | } |
47 | 43 | ||
48 | /* enable signals if sig isn't IRQ signal */ | 44 | /* enable signals if sig isn't IRQ signal */ |
49 | if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM)) | 45 | if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM)) |
50 | unblock_signals(); | 46 | unblock_signals(); |
51 | 47 | ||
52 | (*sig_info[sig])(sig, si, r); | 48 | (*sig_info[sig])(sig, si, &r); |
53 | 49 | ||
54 | errno = save_errno; | 50 | errno = save_errno; |
55 | |||
56 | free(r); | ||
57 | } | 51 | } |
58 | 52 | ||
59 | /* | 53 | /* |
@@ -91,17 +85,11 @@ void sig_handler(int sig, struct siginfo *si, mcontext_t *mc) | |||
91 | 85 | ||
92 | static void timer_real_alarm_handler(mcontext_t *mc) | 86 | static void timer_real_alarm_handler(mcontext_t *mc) |
93 | { | 87 | { |
94 | struct uml_pt_regs *regs; | 88 | struct uml_pt_regs regs; |
95 | |||
96 | regs = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC); | ||
97 | if (!regs) | ||
98 | panic("out of memory"); | ||
99 | 89 | ||
100 | if (mc != NULL) | 90 | if (mc != NULL) |
101 | get_regs_from_mc(regs, mc); | 91 | get_regs_from_mc(®s, mc); |
102 | timer_handler(SIGALRM, NULL, regs); | 92 | timer_handler(SIGALRM, NULL, ®s); |
103 | |||
104 | free(regs); | ||
105 | } | 93 | } |
106 | 94 | ||
107 | void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc) | 95 | void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc) |
diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c index 998fbb445458..e261656fe9d7 100644 --- a/arch/um/os-Linux/umid.c +++ b/arch/um/os-Linux/umid.c | |||
@@ -135,12 +135,18 @@ out: | |||
135 | */ | 135 | */ |
136 | static inline int is_umdir_used(char *dir) | 136 | static inline int is_umdir_used(char *dir) |
137 | { | 137 | { |
138 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 138 | char pid[sizeof("nnnnn\0")], *end, *file; |
139 | char pid[sizeof("nnnnn\0")], *end; | ||
140 | int dead, fd, p, n, err; | 139 | int dead, fd, p, n, err; |
140 | size_t filelen; | ||
141 | 141 | ||
142 | n = snprintf(file, sizeof(file), "%s/pid", dir); | 142 | err = asprintf(&file, "%s/pid", dir); |
143 | if (n >= sizeof(file)) { | 143 | if (err < 0) |
144 | return 0; | ||
145 | |||
146 | filelen = strlen(file); | ||
147 | |||
148 | n = snprintf(file, filelen, "%s/pid", dir); | ||
149 | if (n >= filelen) { | ||
144 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); | 150 | printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n"); |
145 | err = -E2BIG; | 151 | err = -E2BIG; |
146 | goto out; | 152 | goto out; |
@@ -185,6 +191,7 @@ static inline int is_umdir_used(char *dir) | |||
185 | out_close: | 191 | out_close: |
186 | close(fd); | 192 | close(fd); |
187 | out: | 193 | out: |
194 | free(file); | ||
188 | return 0; | 195 | return 0; |
189 | } | 196 | } |
190 | 197 | ||
@@ -210,18 +217,21 @@ static int umdir_take_if_dead(char *dir) | |||
210 | 217 | ||
211 | static void __init create_pid_file(void) | 218 | static void __init create_pid_file(void) |
212 | { | 219 | { |
213 | char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")]; | 220 | char pid[sizeof("nnnnn\0")], *file; |
214 | char pid[sizeof("nnnnn\0")]; | ||
215 | int fd, n; | 221 | int fd, n; |
216 | 222 | ||
217 | if (umid_file_name("pid", file, sizeof(file))) | 223 | file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")); |
224 | if (!file) | ||
218 | return; | 225 | return; |
219 | 226 | ||
227 | if (umid_file_name("pid", file, sizeof(file))) | ||
228 | goto out; | ||
229 | |||
220 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); | 230 | fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644); |
221 | if (fd < 0) { | 231 | if (fd < 0) { |
222 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " | 232 | printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: " |
223 | "%s\n", file, strerror(errno)); | 233 | "%s\n", file, strerror(errno)); |
224 | return; | 234 | goto out; |
225 | } | 235 | } |
226 | 236 | ||
227 | snprintf(pid, sizeof(pid), "%d\n", getpid()); | 237 | snprintf(pid, sizeof(pid), "%d\n", getpid()); |
@@ -231,6 +241,8 @@ static void __init create_pid_file(void) | |||
231 | errno); | 241 | errno); |
232 | 242 | ||
233 | close(fd); | 243 | close(fd); |
244 | out: | ||
245 | free(file); | ||
234 | } | 246 | } |
235 | 247 | ||
236 | int __init set_umid(char *name) | 248 | int __init set_umid(char *name) |
@@ -385,13 +397,19 @@ __uml_setup("uml_dir=", set_uml_dir, | |||
385 | 397 | ||
386 | static void remove_umid_dir(void) | 398 | static void remove_umid_dir(void) |
387 | { | 399 | { |
388 | char dir[strlen(uml_dir) + UMID_LEN + 1], err; | 400 | char *dir, err; |
401 | |||
402 | dir = malloc(strlen(uml_dir) + UMID_LEN + 1); | ||
403 | if (!dir) | ||
404 | return; | ||
389 | 405 | ||
390 | sprintf(dir, "%s%s", uml_dir, umid); | 406 | sprintf(dir, "%s%s", uml_dir, umid); |
391 | err = remove_files_and_dir(dir); | 407 | err = remove_files_and_dir(dir); |
392 | if (err) | 408 | if (err) |
393 | os_warn("%s - remove_files_and_dir failed with err = %d\n", | 409 | os_warn("%s - remove_files_and_dir failed with err = %d\n", |
394 | __func__, err); | 410 | __func__, err); |
411 | |||
412 | free(dir); | ||
395 | } | 413 | } |
396 | 414 | ||
397 | __uml_exitcall(remove_umid_dir); | 415 | __uml_exitcall(remove_umid_dir); |