Commit Graph

17 Commits

Author SHA1 Message Date
Hendrik Brueckner c77f7cf74b [S390] hvc_iucv: do not call iucv_unregister if iucv_register failed
If the iucv_register() functions fails, the error recovery calls
iucv_unregister() which might cause the following stack backtrace:

	(<0000000000100ab2> show_trace+0xee/0x144)
	<00000000004f1842> panic+0xb6/0x248
	<00000000001010a6> die+0x15a/0x16c
	<000000000011d936> do_no_context+0xa6/0xe4
	<00000000004f84dc> do_protection_exception+0x2e8/0x3a4
	<0000000000113afc> pgm_exit+0x0/0x14
	<00000000004e786e> iucv_unregister+0x5a/0x17c
	(<00000000004e785e> iucv_unregister+0x4a/0x17c)
	<000000000076de74> hvc_iucv_init+0x228/0x5dc
	<00000000001000c2> do_one_initcall+0x3e/0x19c
	<00000000007524a2> kernel_init+0x28e/0x404
	<0000000000105dd6> kernel_thread_starter+0x6/0xc
	<0000000000105dd0> kernel_thread_starter+0x0/0xc

Remove the call to iucv_unregister() and remove the goto label
as unregistering is the last step in the hvc_iucv initialization.
If iucv_register() fails, simply clean up hvc terminals and free
resources.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2010-10-25 16:10:17 +02:00
Sachin Sant 549a8a0306 Add param ops struct for hvc_iucv driver.
Today's next 20091117 build failed on s390 with

drivers/char/hvc_iucv.c:1331: error: 'param_ops_vmidfilter' undeclared here (not in a function)
make[2]: *** [drivers/char/hvc_iucv.o] Error 1

Most probably caused by commit 684a6d340b8a5767db4670031b0f39455346018a
(param:param_ops) which introduced a param_ops structure.

The following compile tested patch adds a param_ops structure for hvc_iucv.

Signed-off-by: Sachin Sant <sachinp@in.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Tested-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2010-08-11 23:04:16 +09:30
Tejun Heo 5a0e3ad6af include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
percpu.h is included by sched.h and module.h and thus ends up being
included when building most .c files.  percpu.h includes slab.h which
in turn includes gfp.h making everything defined by the two files
universally available and complicating inclusion dependencies.

percpu.h -> slab.h dependency is about to be removed.  Prepare for
this change by updating users of gfp and slab facilities include those
headers directly instead of assuming availability.  As this conversion
needs to touch large number of source files, the following script is
used as the basis of conversion.

  http://userweb.kernel.org/~tj/misc/slabh-sweep.py

The script does the followings.

* Scan files for gfp and slab usages and update includes such that
  only the necessary includes are there.  ie. if only gfp is used,
  gfp.h, if slab is used, slab.h.

* When the script inserts a new include, it looks at the include
  blocks and try to put the new include such that its order conforms
  to its surrounding.  It's put in the include block which contains
  core kernel includes, in the same order that the rest are ordered -
  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
  doesn't seem to be any matching order.

* If the script can't find a place to put a new include (mostly
  because the file doesn't have fitting include block), it prints out
  an error message indicating which .h file needs to be added to the
  file.

The conversion was done in the following steps.

1. The initial automatic conversion of all .c files updated slightly
   over 4000 files, deleting around 700 includes and adding ~480 gfp.h
   and ~3000 slab.h inclusions.  The script emitted errors for ~400
   files.

2. Each error was manually checked.  Some didn't need the inclusion,
   some needed manual addition while adding it to implementation .h or
   embedding .c file was more appropriate for others.  This step added
   inclusions to around 150 files.

3. The script was run again and the output was compared to the edits
   from #2 to make sure no file was left behind.

4. Several build tests were done and a couple of problems were fixed.
   e.g. lib/decompress_*.c used malloc/free() wrappers around slab
   APIs requiring slab.h to be added manually.

5. The script was run on all .h files but without automatically
   editing them as sprinkling gfp.h and slab.h inclusions around .h
   files could easily lead to inclusion dependency hell.  Most gfp.h
   inclusion directives were ignored as stuff from gfp.h was usually
   wildly available and often used in preprocessor macros.  Each
   slab.h inclusion directive was examined and added manually as
   necessary.

6. percpu.h was updated not to include slab.h.

7. Build test were done on the following configurations and failures
   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
   distributed build env didn't work with gcov compiles) and a few
   more options had to be turned off depending on archs to make things
   build (like ipr on powerpc/64 which failed due to missing writeq).

   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
   * powerpc and powerpc64 SMP allmodconfig
   * sparc and sparc64 SMP allmodconfig
   * ia64 SMP allmodconfig
   * s390 SMP allmodconfig
   * alpha SMP allmodconfig
   * um on x86_64 SMP allmodconfig

8. percpu.h modifications were reverted so that it could be applied as
   a separate patch and serve as bisection point.

Given the fact that I had only a couple of failures from tests on step
6, I'm fairly confident about the coverage of this conversion patch.
If there is a breakage, it's likely to be something in one of the arch
headers which should be easily discoverable easily on most builds of
the specific arch.

Signed-off-by: Tejun Heo <tj@kernel.org>
Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
2010-03-30 22:02:32 +09:00
Hendrik Brueckner 91a970d988 [S390] hvc_iucv: allocate memory buffers for IUCV in zone DMA
The device driver must allocate memory for IUCV buffers with GFP_DMA,
because IUCV cannot address memory above 2GB (31bit addresses only).

Because the IUCV ignores the higher bits of the address, sending and
receiving IUCV data with this driver might cause memory corruptions.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2010-03-08 12:25:29 +01:00
Rusty Russell 1dff399616 hvc_console: make the ops pointer const.
This is nicer for modern R/O protection.  And noone needs it non-const, so
constify the callers as well.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linuxppc-dev@ozlabs.org
2010-02-24 14:22:32 +10:30
Alexey Dobriyan 471452104b const: constify remaining dev_pm_ops
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-12-15 08:53:25 -08:00
Hendrik Brueckner 254be490f2 hvc_console: Provide (un)locked version for hvc_resize()
Rename the locking free hvc_resize() function to __hvc_resize() and
provide an inline function that locks the hvc_struct and calls
__hvc_resize().

The rationale for this patch is that virtio_console calls the hvc_resize()
function without locking the hvc_struct. So it needs to call the lock
itself.

According to naming rules, the unlocked version is renamed and
prefixed with "__".
References to unlocked function calls in hvc back-ends has been updated.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2009-09-24 15:12:47 +10:00
Sebastian Ott c630493327 [S390] proper use of device register
Don't use kfree directly after device registration started.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-09-11 10:29:45 +02:00
Hendrik Brueckner 0259162ecd [S390] pm: hvc_iucv power management callbacks
The patch adds supporting for suspending and resuming IUCV HVC terminal
devices from disk. The obligatory Linux device driver interfaces has
been added by registering a device driver on the IUCV bus.
For each IUCV HVC terminal device the driver creates a respective device
on the IUCV bus.

To support suspend and resume, the PM freeze callback severs any established
IUCV communication path and triggers a HVC tty hang-up when the system image
is restored.
IUCV communication path are no longer valid when the z/VM guest is halted.

The device driver initialization has been updated to register devices and
the a new routine has been extracted to facilitate the hang-up of IUCV HVC
terminal devices.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-06-16 10:31:19 +02:00
Hendrik Brueckner 431429ff78 [S390] hvc_iucv: Provide IUCV z/VM user ID filtering
This patch introduces the kernel parameter hvc_iucv_allow= that specifies
a comma-separated list of z/VM user IDs.
If specified, the z/VM IUCV hypervisor console device driver accepts IUCV
connections from listed z/VM user IDs only.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-03-26 15:24:08 +01:00
Hendrik Brueckner 82f3a79bc6 [S390] hvc_iucv: Update and add missing kernel messages
If the hvc_iucv= kernel parameter specifies a value that is not
valid, display an error message.
Minor changes to existing kernel messages.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-03-26 15:24:07 +01:00
Hendrik Brueckner 6c089fd350 [S390] hvc_iucv: Special handling of IUCV HVC devices
This patch introduces special handling of the IUCV HVC console device.

If the first IUCV HVC terminal is used as (preferred) Linux console, and
needs some special handling for hangup.
The hvc_iucv_private structure contains a flag to indicate whether a IUCV
HVC device is used as a console.

A terminal acting as "console" behaves different if a tty hangup occurs:
If the iucv communication path is severed, a tty hangup is not
triggered (because the HVC layer does not notify its back-end in that case).
Instead, the console session is left unchanged and the IUCV HVC device is
reset to allow re-connects.
Note: Any output between the disconnect and a re-connect is discarded.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-01-09 12:15:09 +01:00
Hendrik Brueckner 68c6b3d2c6 [S390] hvc_iucv: Refactor console and device initialization
The console_initcall() order might pick up the hvc_iucv device as preferred
console even if it is not yet initialized.
Move HVC console instantiation to hvc_iucv_init() and cleanup device driver
initialization.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-01-09 12:15:09 +01:00
Hendrik Brueckner 17e19f04ac [S390] hvc_iucv: Update function documentation
Update documentation of functions.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-01-09 12:15:08 +01:00
Hendrik Brueckner c45ce4b577 [S390] hvc_iucv: Limit rate of outgoing IUCV messages
This patch introduces a send buffer to limit outgoing IUCV messages up to
a maximum of 25 IUCV messages per second.

If no communication path to a IUCV HVC terminal exist, any data written to
the terminal is discarded.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-01-09 12:15:08 +01:00
Hendrik Brueckner 2dc184c0ba [S390] hvc_iucv: Change IUCV term id and use one device as default
The patch renames the IUCV application ID from "ihvc" to "lnxhvc".
The device driver allocates one IUCV terminal device (lnxhvc0) as default.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-01-09 12:15:08 +01:00
Hendrik Brueckner 44a01d5ba8 [S390] s390/hvc_console: z/VM IUCV hypervisor console support
This patch introduces a new hypervisor console (HVC) back-end that provides
terminal access over the z/VM inter-user communication vehicle (IUCV).

The z/VM IUCV communication is independent of the regular tcp/ip network
and allows access even if there is no network connection between two
z/VM guest virtual machines.
The z/VM IUCV hypervisor console back-end helps the user to access a
z/VM guest virtual machine that lacks of network connectivity; and thus,
provides a "full-screen" terminal alternative to 3215/3270 terminal sessions.

Use the hvc_iucv=[0..8] kernel boot parameter to specify the number of
HVC terminals using a z/VM IUCV back-end.

A recent version of the s390-tools package is required to establish a
terminal connection to a z/VM IUCV hypervisor console back-end.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2008-12-25 13:39:03 +01:00