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
This commit is contained in:
		@@ -80,46 +80,46 @@ config LD_SCRIPT_DYN
 | 
			
		||||
	bool
 | 
			
		||||
	default y
 | 
			
		||||
	depends on !LD_SCRIPT_STATIC
 | 
			
		||||
        select MODULE_REL_CRCS if MODVERSIONS
 | 
			
		||||
	select MODULE_REL_CRCS if MODVERSIONS
 | 
			
		||||
 | 
			
		||||
config HOSTFS
 | 
			
		||||
	tristate "Host filesystem"
 | 
			
		||||
	help
 | 
			
		||||
          While the User-Mode Linux port uses its own root file system for
 | 
			
		||||
          booting and normal file access, this module lets the UML user
 | 
			
		||||
          access files stored on the host.  It does not require any
 | 
			
		||||
          network connection between the Host and UML.  An example use of
 | 
			
		||||
          this might be:
 | 
			
		||||
	  While the User-Mode Linux port uses its own root file system for
 | 
			
		||||
	  booting and normal file access, this module lets the UML user
 | 
			
		||||
	  access files stored on the host.  It does not require any
 | 
			
		||||
	  network connection between the Host and UML.  An example use of
 | 
			
		||||
	  this might be:
 | 
			
		||||
 | 
			
		||||
          mount none /tmp/fromhost -t hostfs -o /tmp/umlshare
 | 
			
		||||
	  mount none /tmp/fromhost -t hostfs -o /tmp/umlshare
 | 
			
		||||
 | 
			
		||||
          where /tmp/fromhost is an empty directory inside UML and
 | 
			
		||||
          /tmp/umlshare is a directory on the host with files the UML user
 | 
			
		||||
          wishes to access.
 | 
			
		||||
	  where /tmp/fromhost is an empty directory inside UML and
 | 
			
		||||
	  /tmp/umlshare is a directory on the host with files the UML user
 | 
			
		||||
	  wishes to access.
 | 
			
		||||
 | 
			
		||||
          For more information, see
 | 
			
		||||
          <http://user-mode-linux.sourceforge.net/hostfs.html>.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/hostfs.html>.
 | 
			
		||||
 | 
			
		||||
          If you'd like to be able to work with files stored on the host,
 | 
			
		||||
          say Y or M here; otherwise say N.
 | 
			
		||||
	  If you'd like to be able to work with files stored on the host,
 | 
			
		||||
	  say Y or M here; otherwise say N.
 | 
			
		||||
 | 
			
		||||
config MCONSOLE
 | 
			
		||||
	bool "Management console"
 | 
			
		||||
	depends on PROC_FS
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
          The user mode linux management console is a low-level interface to
 | 
			
		||||
          the kernel, somewhat like the i386 SysRq interface.  Since there is
 | 
			
		||||
          a full-blown operating system running under every user mode linux
 | 
			
		||||
          instance, there is much greater flexibility possible than with the
 | 
			
		||||
          SysRq mechanism.
 | 
			
		||||
	  The user mode linux management console is a low-level interface to
 | 
			
		||||
	  the kernel, somewhat like the i386 SysRq interface.  Since there is
 | 
			
		||||
	  a full-blown operating system running under every user mode linux
 | 
			
		||||
	  instance, there is much greater flexibility possible than with the
 | 
			
		||||
	  SysRq mechanism.
 | 
			
		||||
 | 
			
		||||
          If you answer 'Y' to this option, to use this feature, you need the
 | 
			
		||||
          mconsole client (called uml_mconsole) which is present in CVS in
 | 
			
		||||
          2.4.5-9um and later (path /tools/mconsole), and is also in the
 | 
			
		||||
          distribution RPM package in 2.4.6 and later.
 | 
			
		||||
	  If you answer 'Y' to this option, to use this feature, you need the
 | 
			
		||||
	  mconsole client (called uml_mconsole) which is present in CVS in
 | 
			
		||||
	  2.4.5-9um and later (path /tools/mconsole), and is also in the
 | 
			
		||||
	  distribution RPM package in 2.4.6 and later.
 | 
			
		||||
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config MAGIC_SYSRQ
 | 
			
		||||
	bool "Magic SysRq key"
 | 
			
		||||
@@ -142,13 +142,17 @@ config MAGIC_SYSRQ
 | 
			
		||||
 | 
			
		||||
config KERNEL_STACK_ORDER
 | 
			
		||||
	int "Kernel stack size order"
 | 
			
		||||
	default 1 if 64BIT
 | 
			
		||||
	range 1 10 if 64BIT
 | 
			
		||||
	default 0 if !64BIT
 | 
			
		||||
	default 2 if 64BIT
 | 
			
		||||
	range 2 10 if 64BIT
 | 
			
		||||
	default 1 if !64BIT
 | 
			
		||||
	help
 | 
			
		||||
	  This option determines the size of UML kernel stacks.  They will
 | 
			
		||||
	  be 1 << order pages.  The default is OK unless you're running Valgrind
 | 
			
		||||
	  on UML, in which case, set this to 3.
 | 
			
		||||
	  It is possible to reduce the stack to 1 for 64BIT and 0 for 32BIT on
 | 
			
		||||
	  older (pre-2017) CPUs. It is not recommended on newer CPUs due to the
 | 
			
		||||
	  increase in the size of the state which needs to be saved when handling
 | 
			
		||||
          signals.
 | 
			
		||||
 | 
			
		||||
config MMAPPER
 | 
			
		||||
	tristate "iomem emulation driver"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,58 +11,58 @@ config STDERR_CONSOLE
 | 
			
		||||
config SSL
 | 
			
		||||
	bool "Virtual serial line"
 | 
			
		||||
	help
 | 
			
		||||
          The User-Mode Linux environment allows you to create virtual serial
 | 
			
		||||
          lines on the UML that are usually made to show up on the host as
 | 
			
		||||
          ttys or ptys.
 | 
			
		||||
	  The User-Mode Linux environment allows you to create virtual serial
 | 
			
		||||
	  lines on the UML that are usually made to show up on the host as
 | 
			
		||||
	  ttys or ptys.
 | 
			
		||||
 | 
			
		||||
          See <http://user-mode-linux.sourceforge.net/old/input.html> for more
 | 
			
		||||
          information and command line examples of how to use this facility.
 | 
			
		||||
	  See <http://user-mode-linux.sourceforge.net/old/input.html> for more
 | 
			
		||||
	  information and command line examples of how to use this facility.
 | 
			
		||||
 | 
			
		||||
          Unless you have a specific reason for disabling this, say Y.
 | 
			
		||||
	  Unless you have a specific reason for disabling this, say Y.
 | 
			
		||||
 | 
			
		||||
config NULL_CHAN
 | 
			
		||||
	bool "null channel support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables support for attaching UML consoles and serial
 | 
			
		||||
          lines to a device similar to /dev/null.  Data written to it disappears
 | 
			
		||||
          and there is never any data to be read.
 | 
			
		||||
	  This option enables support for attaching UML consoles and serial
 | 
			
		||||
	  lines to a device similar to /dev/null.  Data written to it disappears
 | 
			
		||||
	  and there is never any data to be read.
 | 
			
		||||
 | 
			
		||||
config PORT_CHAN
 | 
			
		||||
	bool "port channel support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables support for attaching UML consoles and serial
 | 
			
		||||
          lines to host portals.  They may be accessed with 'telnet <host>
 | 
			
		||||
          <port number>'.  Any number of consoles and serial lines may be
 | 
			
		||||
          attached to a single portal, although what UML device you get when
 | 
			
		||||
          you telnet to that portal will be unpredictable.
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  This option enables support for attaching UML consoles and serial
 | 
			
		||||
	  lines to host portals.  They may be accessed with 'telnet <host>
 | 
			
		||||
	  <port number>'.  Any number of consoles and serial lines may be
 | 
			
		||||
	  attached to a single portal, although what UML device you get when
 | 
			
		||||
	  you telnet to that portal will be unpredictable.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config PTY_CHAN
 | 
			
		||||
	bool "pty channel support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables support for attaching UML consoles and serial
 | 
			
		||||
          lines to host pseudo-terminals.  Access to both traditional
 | 
			
		||||
          pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
 | 
			
		||||
          with this option.  The assignment of UML devices to host devices
 | 
			
		||||
          will be announced in the kernel message log.
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  This option enables support for attaching UML consoles and serial
 | 
			
		||||
	  lines to host pseudo-terminals.  Access to both traditional
 | 
			
		||||
	  pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
 | 
			
		||||
	  with this option.  The assignment of UML devices to host devices
 | 
			
		||||
	  will be announced in the kernel message log.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config TTY_CHAN
 | 
			
		||||
	bool "tty channel support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables support for attaching UML consoles and serial
 | 
			
		||||
          lines to host terminals.  Access to both virtual consoles
 | 
			
		||||
          (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
 | 
			
		||||
          /dev/pts/*) are controlled by this option.
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  This option enables support for attaching UML consoles and serial
 | 
			
		||||
	  lines to host terminals.  Access to both virtual consoles
 | 
			
		||||
	  (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
 | 
			
		||||
	  /dev/pts/*) are controlled by this option.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config XTERM_CHAN
 | 
			
		||||
	bool "xterm channel support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables support for attaching UML consoles and serial
 | 
			
		||||
          lines to xterms.  Each UML device so assigned will be brought up in
 | 
			
		||||
          its own xterm.
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  This option enables support for attaching UML consoles and serial
 | 
			
		||||
	  lines to xterms.  Each UML device so assigned will be brought up in
 | 
			
		||||
	  its own xterm.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config NOCONFIG_CHAN
 | 
			
		||||
	bool
 | 
			
		||||
@@ -72,43 +72,43 @@ config CON_ZERO_CHAN
 | 
			
		||||
	string "Default main console channel initialization"
 | 
			
		||||
	default "fd:0,fd:1"
 | 
			
		||||
	help
 | 
			
		||||
          This is the string describing the channel to which the main console
 | 
			
		||||
          will be attached by default.  This value can be overridden from the
 | 
			
		||||
          command line.  The default value is "fd:0,fd:1", which attaches the
 | 
			
		||||
          main console to stdin and stdout.
 | 
			
		||||
          It is safe to leave this unchanged.
 | 
			
		||||
	  This is the string describing the channel to which the main console
 | 
			
		||||
	  will be attached by default.  This value can be overridden from the
 | 
			
		||||
	  command line.  The default value is "fd:0,fd:1", which attaches the
 | 
			
		||||
	  main console to stdin and stdout.
 | 
			
		||||
	  It is safe to leave this unchanged.
 | 
			
		||||
 | 
			
		||||
config CON_CHAN
 | 
			
		||||
	string "Default console channel initialization"
 | 
			
		||||
	default "xterm"
 | 
			
		||||
	help
 | 
			
		||||
          This is the string describing the channel to which all consoles
 | 
			
		||||
          except the main console will be attached by default.  This value can
 | 
			
		||||
          be overridden from the command line.  The default value is "xterm",
 | 
			
		||||
          which brings them up in xterms.
 | 
			
		||||
          It is safe to leave this unchanged, although you may wish to change
 | 
			
		||||
          this if you expect the UML that you build to be run in environments
 | 
			
		||||
          which don't have X or xterm available.
 | 
			
		||||
	  This is the string describing the channel to which all consoles
 | 
			
		||||
	  except the main console will be attached by default.  This value can
 | 
			
		||||
	  be overridden from the command line.  The default value is "xterm",
 | 
			
		||||
	  which brings them up in xterms.
 | 
			
		||||
	  It is safe to leave this unchanged, although you may wish to change
 | 
			
		||||
	  this if you expect the UML that you build to be run in environments
 | 
			
		||||
	  which don't have X or xterm available.
 | 
			
		||||
 | 
			
		||||
config SSL_CHAN
 | 
			
		||||
	string "Default serial line channel initialization"
 | 
			
		||||
	default "pty"
 | 
			
		||||
	help
 | 
			
		||||
          This is the string describing the channel to which the serial lines
 | 
			
		||||
          will be attached by default.  This value can be overridden from the
 | 
			
		||||
          command line.  The default value is "pty", which attaches them to
 | 
			
		||||
          traditional pseudo-terminals.
 | 
			
		||||
          It is safe to leave this unchanged, although you may wish to change
 | 
			
		||||
          this if you expect the UML that you build to be run in environments
 | 
			
		||||
          which don't have a set of /dev/pty* devices.
 | 
			
		||||
	  This is the string describing the channel to which the serial lines
 | 
			
		||||
	  will be attached by default.  This value can be overridden from the
 | 
			
		||||
	  command line.  The default value is "pty", which attaches them to
 | 
			
		||||
	  traditional pseudo-terminals.
 | 
			
		||||
	  It is safe to leave this unchanged, although you may wish to change
 | 
			
		||||
	  this if you expect the UML that you build to be run in environments
 | 
			
		||||
	  which don't have a set of /dev/pty* devices.
 | 
			
		||||
 | 
			
		||||
config UML_SOUND
 | 
			
		||||
	tristate "Sound support"
 | 
			
		||||
	help
 | 
			
		||||
          This option enables UML sound support.  If enabled, it will pull in
 | 
			
		||||
          soundcore and the UML hostaudio relay, which acts as a intermediary
 | 
			
		||||
          between the host's dsp and mixer devices and the UML sound system.
 | 
			
		||||
          It is safe to say 'Y' here.
 | 
			
		||||
	  This option enables UML sound support.  If enabled, it will pull in
 | 
			
		||||
	  soundcore and the UML hostaudio relay, which acts as a intermediary
 | 
			
		||||
	  between the host's dsp and mixer devices and the UML sound system.
 | 
			
		||||
	  It is safe to say 'Y' here.
 | 
			
		||||
 | 
			
		||||
config SOUND
 | 
			
		||||
	tristate
 | 
			
		||||
@@ -131,107 +131,107 @@ menu "UML Network Devices"
 | 
			
		||||
config UML_NET
 | 
			
		||||
	bool "Virtual network device"
 | 
			
		||||
	help
 | 
			
		||||
        While the User-Mode port cannot directly talk to any physical
 | 
			
		||||
        hardware devices, this choice and the following transport options
 | 
			
		||||
        provide one or more virtual network devices through which the UML
 | 
			
		||||
        kernels can talk to each other, the host, and with the host's help,
 | 
			
		||||
        machines on the outside world.
 | 
			
		||||
	  While the User-Mode port cannot directly talk to any physical
 | 
			
		||||
	  hardware devices, this choice and the following transport options
 | 
			
		||||
	  provide one or more virtual network devices through which the UML
 | 
			
		||||
	  kernels can talk to each other, the host, and with the host's help,
 | 
			
		||||
	  machines on the outside world.
 | 
			
		||||
 | 
			
		||||
        For more information, including explanations of the networking and
 | 
			
		||||
        sample configurations, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>.
 | 
			
		||||
	  For more information, including explanations of the networking and
 | 
			
		||||
	  sample configurations, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>.
 | 
			
		||||
 | 
			
		||||
        If you'd like to be able to enable networking in the User-Mode
 | 
			
		||||
        linux environment, say Y; otherwise say N.  Note that you must
 | 
			
		||||
        enable at least one of the following transport options to actually
 | 
			
		||||
        make use of UML networking.
 | 
			
		||||
	  If you'd like to be able to enable networking in the User-Mode
 | 
			
		||||
	  linux environment, say Y; otherwise say N.  Note that you must
 | 
			
		||||
	  enable at least one of the following transport options to actually
 | 
			
		||||
	  make use of UML networking.
 | 
			
		||||
 | 
			
		||||
config UML_NET_ETHERTAP
 | 
			
		||||
	bool "Ethertap transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        The Ethertap User-Mode Linux network transport allows a single
 | 
			
		||||
        running UML to exchange packets with its host over one of the
 | 
			
		||||
        host's Ethertap devices, such as /dev/tap0.  Additional running
 | 
			
		||||
        UMLs can use additional Ethertap devices, one per running UML.
 | 
			
		||||
        While the UML believes it's on a (multi-device, broadcast) virtual
 | 
			
		||||
        Ethernet network, it's in fact communicating over a point-to-point
 | 
			
		||||
        link with the host.
 | 
			
		||||
	  The Ethertap User-Mode Linux network transport allows a single
 | 
			
		||||
	  running UML to exchange packets with its host over one of the
 | 
			
		||||
	  host's Ethertap devices, such as /dev/tap0.  Additional running
 | 
			
		||||
	  UMLs can use additional Ethertap devices, one per running UML.
 | 
			
		||||
	  While the UML believes it's on a (multi-device, broadcast) virtual
 | 
			
		||||
	  Ethernet network, it's in fact communicating over a point-to-point
 | 
			
		||||
	  link with the host.
 | 
			
		||||
 | 
			
		||||
        To use this, your host kernel must have support for Ethertap
 | 
			
		||||
        devices.  Also, if your host kernel is 2.4.x, it must have
 | 
			
		||||
        CONFIG_NETLINK_DEV configured as Y or M.
 | 
			
		||||
	  To use this, your host kernel must have support for Ethertap
 | 
			
		||||
	  devices.  Also, if your host kernel is 2.4.x, it must have
 | 
			
		||||
	  CONFIG_NETLINK_DEV configured as Y or M.
 | 
			
		||||
 | 
			
		||||
        For more information, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
        has examples of the UML command line to use to enable Ethertap
 | 
			
		||||
        networking.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
	  has examples of the UML command line to use to enable Ethertap
 | 
			
		||||
	  networking.
 | 
			
		||||
 | 
			
		||||
        If you'd like to set up an IP network with the host and/or the
 | 
			
		||||
        outside world, say Y to this, the Daemon Transport and/or the
 | 
			
		||||
        Slip Transport.  You'll need at least one of them, but may choose
 | 
			
		||||
        more than one without conflict.  If you don't need UML networking,
 | 
			
		||||
        say N.
 | 
			
		||||
	  If you'd like to set up an IP network with the host and/or the
 | 
			
		||||
	  outside world, say Y to this, the Daemon Transport and/or the
 | 
			
		||||
	  Slip Transport.  You'll need at least one of them, but may choose
 | 
			
		||||
	  more than one without conflict.  If you don't need UML networking,
 | 
			
		||||
	  say N.
 | 
			
		||||
 | 
			
		||||
config UML_NET_TUNTAP
 | 
			
		||||
	bool "TUN/TAP transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        The UML TUN/TAP network transport allows a UML instance to exchange
 | 
			
		||||
        packets with the host over a TUN/TAP device.  This option will only
 | 
			
		||||
        work with a 2.4 host, unless you've applied the TUN/TAP patch to
 | 
			
		||||
        your 2.2 host kernel.
 | 
			
		||||
	  The UML TUN/TAP network transport allows a UML instance to exchange
 | 
			
		||||
	  packets with the host over a TUN/TAP device.  This option will only
 | 
			
		||||
	  work with a 2.4 host, unless you've applied the TUN/TAP patch to
 | 
			
		||||
	  your 2.2 host kernel.
 | 
			
		||||
 | 
			
		||||
        To use this transport, your host kernel must have support for TUN/TAP
 | 
			
		||||
        devices, either built-in or as a module.
 | 
			
		||||
	  To use this transport, your host kernel must have support for TUN/TAP
 | 
			
		||||
	  devices, either built-in or as a module.
 | 
			
		||||
 | 
			
		||||
config UML_NET_SLIP
 | 
			
		||||
	bool "SLIP transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        The slip User-Mode Linux network transport allows a running UML to
 | 
			
		||||
        network with its host over a point-to-point link.  Unlike Ethertap,
 | 
			
		||||
        which can carry any Ethernet frame (and hence even non-IP packets),
 | 
			
		||||
        the slip transport can only carry IP packets.
 | 
			
		||||
	  The slip User-Mode Linux network transport allows a running UML to
 | 
			
		||||
	  network with its host over a point-to-point link.  Unlike Ethertap,
 | 
			
		||||
	  which can carry any Ethernet frame (and hence even non-IP packets),
 | 
			
		||||
	  the slip transport can only carry IP packets.
 | 
			
		||||
 | 
			
		||||
        To use this, your host must support slip devices.
 | 
			
		||||
	  To use this, your host must support slip devices.
 | 
			
		||||
 | 
			
		||||
        For more information, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>.
 | 
			
		||||
        has examples of the UML command line to use to enable slip
 | 
			
		||||
        networking, and details of a few quirks with it.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>.
 | 
			
		||||
	  has examples of the UML command line to use to enable slip
 | 
			
		||||
	  networking, and details of a few quirks with it.
 | 
			
		||||
 | 
			
		||||
        The Ethertap Transport is preferred over slip because of its
 | 
			
		||||
        limitations.  If you prefer slip, however, say Y here.  Otherwise
 | 
			
		||||
        choose the Multicast transport (to network multiple UMLs on
 | 
			
		||||
        multiple hosts), Ethertap (to network with the host and the
 | 
			
		||||
        outside world), and/or the Daemon transport (to network multiple
 | 
			
		||||
        UMLs on a single host).  You may choose more than one without
 | 
			
		||||
        conflict.  If you don't need UML networking, say N.
 | 
			
		||||
	  The Ethertap Transport is preferred over slip because of its
 | 
			
		||||
	  limitations.  If you prefer slip, however, say Y here.  Otherwise
 | 
			
		||||
	  choose the Multicast transport (to network multiple UMLs on
 | 
			
		||||
	  multiple hosts), Ethertap (to network with the host and the
 | 
			
		||||
	  outside world), and/or the Daemon transport (to network multiple
 | 
			
		||||
	  UMLs on a single host).  You may choose more than one without
 | 
			
		||||
	  conflict.  If you don't need UML networking, say N.
 | 
			
		||||
 | 
			
		||||
config UML_NET_DAEMON
 | 
			
		||||
	bool "Daemon transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        This User-Mode Linux network transport allows one or more running
 | 
			
		||||
        UMLs on a single host to communicate with each other, but not to
 | 
			
		||||
        the host.
 | 
			
		||||
	  This User-Mode Linux network transport allows one or more running
 | 
			
		||||
	  UMLs on a single host to communicate with each other, but not to
 | 
			
		||||
	  the host.
 | 
			
		||||
 | 
			
		||||
        To use this form of networking, you'll need to run the UML
 | 
			
		||||
        networking daemon on the host.
 | 
			
		||||
	  To use this form of networking, you'll need to run the UML
 | 
			
		||||
	  networking daemon on the host.
 | 
			
		||||
 | 
			
		||||
        For more information, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
        has examples of the UML command line to use to enable Daemon
 | 
			
		||||
        networking.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
	  has examples of the UML command line to use to enable Daemon
 | 
			
		||||
	  networking.
 | 
			
		||||
 | 
			
		||||
        If you'd like to set up a network with other UMLs on a single host,
 | 
			
		||||
        say Y.  If you need a network between UMLs on multiple physical
 | 
			
		||||
        hosts, choose the Multicast Transport.  To set up a network with
 | 
			
		||||
        the host and/or other IP machines, say Y to the Ethertap or Slip
 | 
			
		||||
        transports.  You'll need at least one of them, but may choose
 | 
			
		||||
        more than one without conflict.  If you don't need UML networking,
 | 
			
		||||
        say N.
 | 
			
		||||
	  If you'd like to set up a network with other UMLs on a single host,
 | 
			
		||||
	  say Y.  If you need a network between UMLs on multiple physical
 | 
			
		||||
	  hosts, choose the Multicast Transport.  To set up a network with
 | 
			
		||||
	  the host and/or other IP machines, say Y to the Ethertap or Slip
 | 
			
		||||
	  transports.  You'll need at least one of them, but may choose
 | 
			
		||||
	  more than one without conflict.  If you don't need UML networking,
 | 
			
		||||
	  say N.
 | 
			
		||||
 | 
			
		||||
config UML_NET_VECTOR
 | 
			
		||||
	bool "Vector I/O high performance network devices"
 | 
			
		||||
@@ -270,26 +270,26 @@ config UML_NET_MCAST
 | 
			
		||||
	bool "Multicast transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        This Multicast User-Mode Linux network transport allows multiple
 | 
			
		||||
        UMLs (even ones running on different host machines!) to talk to
 | 
			
		||||
        each other over a virtual ethernet network.  However, it requires
 | 
			
		||||
        at least one UML with one of the other transports to act as a
 | 
			
		||||
        bridge if any of them need to be able to talk to their hosts or any
 | 
			
		||||
        other IP machines.
 | 
			
		||||
	  This Multicast User-Mode Linux network transport allows multiple
 | 
			
		||||
	  UMLs (even ones running on different host machines!) to talk to
 | 
			
		||||
	  each other over a virtual ethernet network.  However, it requires
 | 
			
		||||
	  at least one UML with one of the other transports to act as a
 | 
			
		||||
	  bridge if any of them need to be able to talk to their hosts or any
 | 
			
		||||
	  other IP machines.
 | 
			
		||||
 | 
			
		||||
        To use this, your host kernel(s) must support IP Multicasting.
 | 
			
		||||
	  To use this, your host kernel(s) must support IP Multicasting.
 | 
			
		||||
 | 
			
		||||
        For more information, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
        has examples of the UML command line to use to enable Multicast
 | 
			
		||||
        networking, and notes about the security of this approach.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
	  has examples of the UML command line to use to enable Multicast
 | 
			
		||||
	  networking, and notes about the security of this approach.
 | 
			
		||||
 | 
			
		||||
        If you need UMLs on multiple physical hosts to communicate as if
 | 
			
		||||
        they shared an Ethernet network, say Y.  If you need to communicate
 | 
			
		||||
        with other IP machines, make sure you select one of the other
 | 
			
		||||
        transports (possibly in addition to Multicast; they're not
 | 
			
		||||
        exclusive).  If you don't need to network UMLs say N to each of
 | 
			
		||||
        the transports.
 | 
			
		||||
	  If you need UMLs on multiple physical hosts to communicate as if
 | 
			
		||||
	  they shared an Ethernet network, say Y.  If you need to communicate
 | 
			
		||||
	  with other IP machines, make sure you select one of the other
 | 
			
		||||
	  transports (possibly in addition to Multicast; they're not
 | 
			
		||||
	  exclusive).  If you don't need to network UMLs say N to each of
 | 
			
		||||
	  the transports.
 | 
			
		||||
 | 
			
		||||
config UML_NET_PCAP
 | 
			
		||||
	bool "pcap transport"
 | 
			
		||||
@@ -300,9 +300,9 @@ config UML_NET_PCAP
 | 
			
		||||
	UML act as a network monitor for the host.  You must have libcap
 | 
			
		||||
	installed in order to build the pcap transport into UML.
 | 
			
		||||
 | 
			
		||||
        For more information, see
 | 
			
		||||
        <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
        has examples of the UML command line to use to enable this option.
 | 
			
		||||
	  For more information, see
 | 
			
		||||
	  <http://user-mode-linux.sourceforge.net/old/networking.html>  That site
 | 
			
		||||
	  has examples of the UML command line to use to enable this option.
 | 
			
		||||
 | 
			
		||||
	If you intend to use UML as a network monitor for the host, say
 | 
			
		||||
	Y here.  Otherwise, say N.
 | 
			
		||||
@@ -311,27 +311,27 @@ config UML_NET_SLIRP
 | 
			
		||||
	bool "SLiRP transport"
 | 
			
		||||
	depends on UML_NET
 | 
			
		||||
	help
 | 
			
		||||
        The SLiRP User-Mode Linux network transport allows a running UML
 | 
			
		||||
        to network by invoking a program that can handle SLIP encapsulated
 | 
			
		||||
        packets.  This is commonly (but not limited to) the application
 | 
			
		||||
        known as SLiRP, a program that can re-socket IP packets back onto
 | 
			
		||||
        the host on which it is run.  Only IP packets are supported,
 | 
			
		||||
        unlike other network transports that can handle all Ethernet
 | 
			
		||||
        frames.  In general, slirp allows the UML the same IP connectivity
 | 
			
		||||
        to the outside world that the host user is permitted, and unlike
 | 
			
		||||
        other transports, SLiRP works without the need of root level
 | 
			
		||||
        privleges, setuid binaries, or SLIP devices on the host.  This
 | 
			
		||||
        also means not every type of connection is possible, but most
 | 
			
		||||
        situations can be accommodated with carefully crafted slirp
 | 
			
		||||
        commands that can be passed along as part of the network device's
 | 
			
		||||
        setup string.  The effect of this transport on the UML is similar
 | 
			
		||||
        that of a host behind a firewall that masquerades all network
 | 
			
		||||
        connections passing through it (but is less secure).
 | 
			
		||||
	  The SLiRP User-Mode Linux network transport allows a running UML
 | 
			
		||||
	  to network by invoking a program that can handle SLIP encapsulated
 | 
			
		||||
	  packets.  This is commonly (but not limited to) the application
 | 
			
		||||
	  known as SLiRP, a program that can re-socket IP packets back onto
 | 
			
		||||
	  he host on which it is run.  Only IP packets are supported,
 | 
			
		||||
	  unlike other network transports that can handle all Ethernet
 | 
			
		||||
	  frames.  In general, slirp allows the UML the same IP connectivity
 | 
			
		||||
	  to the outside world that the host user is permitted, and unlike
 | 
			
		||||
	  other transports, SLiRP works without the need of root level
 | 
			
		||||
	  privleges, setuid binaries, or SLIP devices on the host.  This
 | 
			
		||||
	  also means not every type of connection is possible, but most
 | 
			
		||||
	  situations can be accommodated with carefully crafted slirp
 | 
			
		||||
	  commands that can be passed along as part of the network device's
 | 
			
		||||
	  setup string.  The effect of this transport on the UML is similar
 | 
			
		||||
	  that of a host behind a firewall that masquerades all network
 | 
			
		||||
	  connections passing through it (but is less secure).
 | 
			
		||||
 | 
			
		||||
        To use this you should first have slirp compiled somewhere
 | 
			
		||||
        accessible on the host, and have read its documentation.  If you
 | 
			
		||||
        don't need UML networking, say N.
 | 
			
		||||
	  To use this you should first have slirp compiled somewhere
 | 
			
		||||
	  accessible on the host, and have read its documentation.  If you
 | 
			
		||||
	  don't need UML networking, say N.
 | 
			
		||||
 | 
			
		||||
        Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp"
 | 
			
		||||
	  Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp"
 | 
			
		||||
 | 
			
		||||
endmenu
 | 
			
		||||
 
 | 
			
		||||
@@ -276,14 +276,14 @@ static int ubd_setup_common(char *str, int *index_out, char **error_out)
 | 
			
		||||
		str++;
 | 
			
		||||
		if(!strcmp(str, "sync")){
 | 
			
		||||
			global_openflags = of_sync(global_openflags);
 | 
			
		||||
			goto out1;
 | 
			
		||||
			return err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = -EINVAL;
 | 
			
		||||
		major = simple_strtoul(str, &end, 0);
 | 
			
		||||
		if((*end != '\0') || (end == str)){
 | 
			
		||||
			*error_out = "Didn't parse major number";
 | 
			
		||||
			goto out1;
 | 
			
		||||
			return err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		mutex_lock(&ubd_lock);
 | 
			
		||||
 
 | 
			
		||||
@@ -263,7 +263,12 @@ static inline void set_pte(pte_t *pteptr, pte_t pteval)
 | 
			
		||||
	*pteptr = pte_mknewpage(*pteptr);
 | 
			
		||||
	if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr);
 | 
			
		||||
}
 | 
			
		||||
#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
 | 
			
		||||
 | 
			
		||||
static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
			
		||||
			      pte_t *pteptr, pte_t pteval)
 | 
			
		||||
{
 | 
			
		||||
	set_pte(pteptr, pteval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define __HAVE_ARCH_PTE_SAME
 | 
			
		||||
static inline int pte_same(pte_t pte_a, pte_t pte_b)
 | 
			
		||||
 
 | 
			
		||||
@@ -479,7 +479,7 @@ void __init init_IRQ(void)
 | 
			
		||||
	irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	for (i = 1; i < NR_IRQS; i++)
 | 
			
		||||
	for (i = 1; i < LAST_IRQ; i++)
 | 
			
		||||
		irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
 | 
			
		||||
	/* Initialize EPOLL Loop */
 | 
			
		||||
	os_setup_epoll();
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,6 @@ static pte_t *maybe_map(unsigned long virt, int is_write)
 | 
			
		||||
static int do_op_one_page(unsigned long addr, int len, int is_write,
 | 
			
		||||
		 int (*op)(unsigned long addr, int len, void *arg), void *arg)
 | 
			
		||||
{
 | 
			
		||||
	jmp_buf buf;
 | 
			
		||||
	struct page *page;
 | 
			
		||||
	pte_t *pte;
 | 
			
		||||
	int n;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ static int itimer_one_shot(struct clock_event_device *evt)
 | 
			
		||||
static struct clock_event_device timer_clockevent = {
 | 
			
		||||
	.name			= "posix-timer",
 | 
			
		||||
	.rating			= 250,
 | 
			
		||||
	.cpumask		= cpu_all_mask,
 | 
			
		||||
	.cpumask		= cpu_possible_mask,
 | 
			
		||||
	.features		= CLOCK_EVT_FEAT_PERIODIC |
 | 
			
		||||
				  CLOCK_EVT_FEAT_ONESHOT,
 | 
			
		||||
	.set_state_shutdown	= itimer_shutdown,
 | 
			
		||||
 
 | 
			
		||||
@@ -31,29 +31,23 @@ void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
 | 
			
		||||
 | 
			
		||||
static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
 | 
			
		||||
{
 | 
			
		||||
	struct uml_pt_regs *r;
 | 
			
		||||
	struct uml_pt_regs r;
 | 
			
		||||
	int save_errno = errno;
 | 
			
		||||
 | 
			
		||||
	r = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
 | 
			
		||||
	if (!r)
 | 
			
		||||
		panic("out of memory");
 | 
			
		||||
 | 
			
		||||
	r->is_user = 0;
 | 
			
		||||
	r.is_user = 0;
 | 
			
		||||
	if (sig == SIGSEGV) {
 | 
			
		||||
		/* For segfaults, we want the data from the sigcontext. */
 | 
			
		||||
		get_regs_from_mc(r, mc);
 | 
			
		||||
		GET_FAULTINFO_FROM_MC(r->faultinfo, mc);
 | 
			
		||||
		get_regs_from_mc(&r, mc);
 | 
			
		||||
		GET_FAULTINFO_FROM_MC(r.faultinfo, mc);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* enable signals if sig isn't IRQ signal */
 | 
			
		||||
	if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM))
 | 
			
		||||
		unblock_signals();
 | 
			
		||||
 | 
			
		||||
	(*sig_info[sig])(sig, si, r);
 | 
			
		||||
	(*sig_info[sig])(sig, si, &r);
 | 
			
		||||
 | 
			
		||||
	errno = save_errno;
 | 
			
		||||
 | 
			
		||||
	free(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -91,17 +85,11 @@ void sig_handler(int sig, struct siginfo *si, mcontext_t *mc)
 | 
			
		||||
 | 
			
		||||
static void timer_real_alarm_handler(mcontext_t *mc)
 | 
			
		||||
{
 | 
			
		||||
	struct uml_pt_regs *regs;
 | 
			
		||||
 | 
			
		||||
	regs = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
 | 
			
		||||
	if (!regs)
 | 
			
		||||
		panic("out of memory");
 | 
			
		||||
	struct uml_pt_regs regs;
 | 
			
		||||
 | 
			
		||||
	if (mc != NULL)
 | 
			
		||||
		get_regs_from_mc(regs, mc);
 | 
			
		||||
	timer_handler(SIGALRM, NULL, regs);
 | 
			
		||||
 | 
			
		||||
	free(regs);
 | 
			
		||||
		get_regs_from_mc(®s, mc);
 | 
			
		||||
	timer_handler(SIGALRM, NULL, ®s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc)
 | 
			
		||||
 
 | 
			
		||||
@@ -135,12 +135,18 @@ out:
 | 
			
		||||
 */
 | 
			
		||||
static inline int is_umdir_used(char *dir)
 | 
			
		||||
{
 | 
			
		||||
	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
 | 
			
		||||
	char pid[sizeof("nnnnn\0")], *end;
 | 
			
		||||
	char pid[sizeof("nnnnn\0")], *end, *file;
 | 
			
		||||
	int dead, fd, p, n, err;
 | 
			
		||||
	size_t filelen;
 | 
			
		||||
 | 
			
		||||
	n = snprintf(file, sizeof(file), "%s/pid", dir);
 | 
			
		||||
	if (n >= sizeof(file)) {
 | 
			
		||||
	err = asprintf(&file, "%s/pid", dir);
 | 
			
		||||
	if (err < 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	filelen = strlen(file);
 | 
			
		||||
 | 
			
		||||
	n = snprintf(file, filelen, "%s/pid", dir);
 | 
			
		||||
	if (n >= filelen) {
 | 
			
		||||
		printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n");
 | 
			
		||||
		err = -E2BIG;
 | 
			
		||||
		goto out;
 | 
			
		||||
@@ -185,6 +191,7 @@ static inline int is_umdir_used(char *dir)
 | 
			
		||||
out_close:
 | 
			
		||||
	close(fd);
 | 
			
		||||
out:
 | 
			
		||||
	free(file);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -210,18 +217,21 @@ static int umdir_take_if_dead(char *dir)
 | 
			
		||||
 | 
			
		||||
static void __init create_pid_file(void)
 | 
			
		||||
{
 | 
			
		||||
	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
 | 
			
		||||
	char pid[sizeof("nnnnn\0")];
 | 
			
		||||
	char pid[sizeof("nnnnn\0")], *file;
 | 
			
		||||
	int fd, n;
 | 
			
		||||
 | 
			
		||||
	if (umid_file_name("pid", file, sizeof(file)))
 | 
			
		||||
	file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0"));
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (umid_file_name("pid", file, sizeof(file)))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644);
 | 
			
		||||
	if (fd < 0) {
 | 
			
		||||
		printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: "
 | 
			
		||||
		       "%s\n", file, strerror(errno));
 | 
			
		||||
		return;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	snprintf(pid, sizeof(pid), "%d\n", getpid());
 | 
			
		||||
@@ -231,6 +241,8 @@ static void __init create_pid_file(void)
 | 
			
		||||
		       errno);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
out:
 | 
			
		||||
	free(file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int __init set_umid(char *name)
 | 
			
		||||
@@ -385,13 +397,19 @@ __uml_setup("uml_dir=", set_uml_dir,
 | 
			
		||||
 | 
			
		||||
static void remove_umid_dir(void)
 | 
			
		||||
{
 | 
			
		||||
	char dir[strlen(uml_dir) + UMID_LEN + 1], err;
 | 
			
		||||
	char *dir, err;
 | 
			
		||||
 | 
			
		||||
	dir = malloc(strlen(uml_dir) + UMID_LEN + 1);
 | 
			
		||||
	if (!dir)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	sprintf(dir, "%s%s", uml_dir, umid);
 | 
			
		||||
	err = remove_files_and_dir(dir);
 | 
			
		||||
	if (err)
 | 
			
		||||
		os_warn("%s - remove_files_and_dir failed with err = %d\n",
 | 
			
		||||
			__func__, err);
 | 
			
		||||
 | 
			
		||||
	free(dir);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__uml_exitcall(remove_umid_dir);
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,7 @@ extern int do_mkdir(const char *file, int mode);
 | 
			
		||||
extern int hostfs_do_rmdir(const char *file);
 | 
			
		||||
extern int do_mknod(const char *file, int mode, unsigned int major,
 | 
			
		||||
		    unsigned int minor);
 | 
			
		||||
extern int link_file(const char *from, const char *to);
 | 
			
		||||
extern int link_file(const char *to, const char *from);
 | 
			
		||||
extern int hostfs_do_readlink(char *file, char *buf, int size);
 | 
			
		||||
extern int rename_file(char *from, char *to);
 | 
			
		||||
extern int rename2_file(char *from, char *to, unsigned int flags);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user