aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6Linus Torvalds2006-06-2925-220/+581
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6: (23 commits) [PARISC] Move os_id_to_string() inside #ifndef __ASSEMBLY__ [PARISC] Fix do_gettimeofday() hang [PARISC] Fix PCREL22F relocation problem for most modules [PARISC] Refactor show_regs in traps.c [PARISC] Add os_id_to_string helper [PARISC] OS_ID_LINUX == 0x0006 [PARISC] Ensure Space ID hashing is turned off [PARISC] Match show_cache_info with reality [PARISC] Remove unused macro fixup_branch in syscall.S [PARISC] Add is_compat_task() helper [PARISC] Update Thibaut Varene's CREDITS entry [PARISC] Reduce data footprint in pdc_stable.c [PARISC] pdc_stable version 0.30 [PARISC] Work around machines which do not support chassis warnings [PARISC] PDC_CHASSIS is implemented on all machines [PARISC] Remove unconditional #define PIC in syscall macros [PARISC] Use MFIA in current_text_addr on pa2.0 processors [PARISC] Remove dead function pc_in_user_space [PARISC] Test ioc_needs_fdc variable instead of open coding [PARISC] Fix gcc 4.1 warnings in sba_iommu.c ...
| * [PARISC] Move os_id_to_string() inside #ifndef __ASSEMBLY__Kyle McMartin2006-06-271-13/+12
| | | | | | | | | | | | | | Assembly files should be protected from os_id_to_string()... Pass me a brown paper bag, please. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Fix do_gettimeofday() hangJames Bottomley2006-06-271-2/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | Apparently gettimeoffset can return small negative values (usually in the 100us range). If xtime.tv_nsec is accidentally less than this, though (a fortunately unlikely event) it triggers the loop forever. I've added a test and correct adjustment for this case. It has a warning printk in there which I'd like to leave for the time being just in case this problem implicates some other part of the kernel. Signed-off-by: James Bottomley <jejb@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Fix PCREL22F relocation problem for most modulesJames Bottomley2006-06-271-13/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new problem, which has been affecting many more modules was that our new ioremap really takes chunks out of our vmalloc space. The net result being that any two kernel vmalloc's now have to slot into the chunked up space. So the vmallocs for a modules init and core sectons are no longer necessarily contiguous. Unfortunately, the module loader thinks that any internal symbol references should be satisfiable using the jump instruction, which isn't true if the symbol is referenced from init to core and vmalloc placed them a long way apart. Fix this by introducing a new stub type for intra module inter sectional jumps and using it. Signed-off-by: James Bottomley <jejb@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Refactor show_regs in traps.cKyle McMartin2006-06-271-44/+40
| | | | | | | | | | | | | | | | | | show_regs() was one bloaty function. Split it into a few cleaner functions and define a clean macro to print a line of registers. [And from Thibaut, only print fprs on a usermode trap.] Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Add os_id_to_string helperKyle McMartin2006-06-272-12/+15
| | | | | | | | | | | | | | Add a helper to asm/pdc.h to translate OS_ID values to strings and use it in the pdc_stable driver. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] OS_ID_LINUX == 0x0006Kyle McMartin2006-06-274-6/+7
| | | | | | | | | | | | | | | | We were assigned an OS_ID of 0x0006. Consistently use OS_ID_LINUX instead of using the magic number. Also update the OS_ID_ defines in asm/pdc.h to reflect this. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Ensure Space ID hashing is turned offKyle McMartin2006-06-273-1/+30
| | | | | | | | | | | | | | | | | | | | | | Check PDC_CACHE to see if spaceid hashing is turned on, and fail to boot if that is the case. However, some old machines do not implement the PDC_CACHE_RET_SPID firmware call, so continue to boot if the call fails because of PDC_BAD_OPTION (but fail in all other error returns). Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Match show_cache_info with realityKyle McMartin2006-06-272-10/+12
| | | | | | | | | | | | | | | | show_cache_info and struct pdc_cache_cf were out of sync with published documentation. Fix the reporting of cache associativity and update the pdc_cache_cf bitfields to match documentation. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Remove unused macro fixup_branch in syscall.SKyle McMartin2006-06-271-12/+0
| | | | | | | | Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Add is_compat_task() helperKyle McMartin2006-06-273-14/+25
| | | | | | | | | | | | | | ... And convert signal.c and ptrace.c to use it instead of open coded equivalents. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Update Thibaut Varene's CREDITS entryThibaut Varene2006-06-271-2/+2
| | | | | | | | | | Signed-off-by: Thibaut VARENE <varenet@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Reduce data footprint in pdc_stable.cThibaut Varene2006-06-271-8/+8
| | | | | | | | | | | | | | No code change - reduce data footprint. Signed-off-by: Thibaut VARENE <varenet@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] pdc_stable version 0.30Thibaut Varene2006-06-272-14/+210
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | pdc_stable v0.30: This patch introduces 3 more files to the /sys/firmware/stable tree: - diagnostic, which contains a cryptic hex string - osdep1, a 16 bytes os-dependent storage area always available - osdep2, another os-dependent storage area which existence/size depends on hversion. This patch also adds code to setup the "Linux" signature in stable storage. That is to say that starting with this patch, the kernel will now sign its OSID (0x0006, thx LaMont) in Stable Storage upon boot, whether pdc_stable is enabled or not. Signed-off-by: Thibaut VARENE <varenet@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Work around machines which do not support chassis warningsThibaut Varene2006-06-271-20/+24
| | | | | | | | | | | | | | | | | | | | pdc_chassis v0.05: Some machines seems not to implement Chassis warn support. Work around these. Also cleanup a bit of the code. Signed-off-by: Thibaut VARENE <varenet@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] PDC_CHASSIS is implemented on all machinesThibaut Varene2006-06-274-22/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch removes a limitation of the original code, so that CHASSIS codes can be sent to all machines. On machines with a LCD panel, this code displays "INI" during bootup, "RUN" when the system is booted and running, "FLT" when a panic occurs, etc. This part of the code can be enabled/disabled through CONFIG_PDC_CHASSIS This patch also adds minimalistic support for Chassis warnings, through a proc entry '/proc/chassis', which will reflect the warnings status (PSU or fans failure when they happen, NVRAM battery level and temperature thresholds overflows). This part of the code can be enabled/disabled through CONFIG_PDC_CHASSIS_WARN Signed-off-by: Thibaut VARENE <varenet@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Remove unconditional #define PIC in syscall macrosCarlos O'Donell2006-06-271-5/+0
| | | | | | | | | | Signed-off-by: Carlos O'Donell <carlos@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Use MFIA in current_text_addr on pa2.0 processorsKyle McMartin2006-06-271-8/+6
| | | | | | | | Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Remove dead function pc_in_user_spaceKyle McMartin2006-06-271-9/+0
| | | | | | | | | | | | | | This code has been crufting up the file without any use for quite a long time, so let's kill it. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Test ioc_needs_fdc variable instead of open codingKyle McMartin2006-06-271-1/+1
| | | | | | | | | | | | | | Some debugging code in sba_iommu.c should be testing ioc_needs_fdc, not directly testing boot_cpu_data. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Fix gcc 4.1 warnings in sba_iommu.cGrant Grundler2006-06-271-7/+8
| | | | | | | | | | | | | | | | | | | | | | Clean up gcc 4.1 warnings noted by Joel Soete. Kyle McMartin gets kudos for pointing out the issues. Matthew Wilcox noticed sba_iommu was using open coded versions of (read|write)X. Signed-off-by: Grant Grundler <grundler@parisc-linux.org> Signed-off-by: Matthew Wilcox <willy@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Use FIXUP_BRANCH_CLOBBER to asm clobber listCarlos O'Donell2006-06-272-10/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Joel Soete noticed correctly that the fixup's clobbers must be listed as the ASM clobbers. FIXUP_BRANCH in unaligned.c has a new macro which lists all the clobbers in the fixup, we use this throughout the file to simplify the process of listing clobbers in the future. A missing "r1" clobber is added to our uaccess.h for the 64-bit __put_kernel_asm. Interestingly this is a pretty serious bug since gcc generates pretty good use of r1 as a temporary and the uses of __put_kernel_asm are varied and dangerous if r1 is scratched during an invalid write. Signed-off-by: Joel Soete <soete.joel@tiscali.be> Signed-off-by: Carlos O'Donell <carlos@parisc-linux.org> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Whitespace clean up in asm/pgtable.hKyle McMartin2006-06-271-4/+4
| | | | | | | | Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
| * [PARISC] Ensure all ldcw uses are ldcw,co on pa2.0Kyle McMartin2006-06-274-16/+20
| | | | | | | | | | | | | | ldcw,co should always be used on pa2.0, otherwise the strict cache width alignment requirement is not relaxed. Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
* | Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6Linus Torvalds2006-06-2948-989/+1458
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: (28 commits) [S390] rework of channel measurement facility. [S390] appldata enhancements. [S390] Add vmpanic parameter. [S390] add PAV support to the dasd driver. [S390] remove export of sys_call_table [S390] remove unused macros from binfmt_elf32.c [S390] fix duplicate export of overflow{ug}id [S390] cio chpid offline. [S390] avenrun export in appdata_base.c Convert s390_collect_crw_info() in s390mach.c from being started [S390] dasd eer data format. [S390] preempt_count initialization. [S390] head.S code moving. [S390] dasd whitespace and other cosmetics. [S390] virtual cpu accounting vs. machine checks. [S390] add __cpuinit to appldata cpu hotplug notifier. [S390] dasd_eckd_dump_sense bug. [S390] missing check in dasd_eer_open. [S390] modular 3270 driver. [S390] console_unblank woes. ...
| * | [S390] rework of channel measurement facility.Cornelia Huck2006-06-294-181/+468
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes for several channel measurement facility bugs: * Blocks copied from the hardware might not be consistent. Solve this by moving the copying into idle state and repeating the copying. * avg_sample_interval changed with every read, even though no new block was available. Solve this by storing a timestamp when the last new block was received. * Several locking issues. * Measurements were not reenabled after a disconnected device became available again. * Remove #defines for ioctls that were never implemented. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] appldata enhancements.Gerald Schaefer2006-06-295-63/+108
| | | | | | | | | | | | | | | | | | | | | Add CPU ID and steal time, and make OS record size variable. Signed-off-by: Gerald Schaefer <geraldsc@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] Add vmpanic parameter.Peter Oberparleiter2006-06-292-2/+41
| | | | | | | | | | | | | | | | | | | | | | | | Implementation of new kernel parameter vmpanic that provides a means to perform a z/VM CP command after a kernel panic occurred. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] add PAV support to the dasd driver.Horst Hummel2006-06-297-90/+227
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for parallel-access-volumes to the dasd driver. This allows concurrent access to dasd devices with multiple channel programs. Signed-off-by: Horst Hummel <horst.hummel@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] remove export of sys_call_tableMartin Schwidefsky2006-06-292-3/+0
| | | | | | | | | | | | | | | | | | Remove export of the sys_call_table symbol to prevent the misuse of it. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] remove unused macros from binfmt_elf32.cMartin Schwidefsky2006-06-291-5/+0
| | | | | | | | | | | | | | | | | | | | | The two macros NEW_TO_OLD_UID and NEW_TO_OLD_GID in binfmt_elf32.c are not used by any code. Remove them. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] fix duplicate export of overflow{ug}idSerge E. Hallyn2006-06-291-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | overflowuid and overflowgid were exported twice. Remove the export from s390_ksyms.c Signed-off-by: Serge E. Hallyn <serue@us.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] cio chpid offline.Cornelia Huck2006-06-293-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After setting a path to a dasd offline at the SE, I/O hangs on that dasd for 5 minutes, then continues. I/O for which an interrupt will not be reported after the channel path has been disabled was not terminated by the common I/O layer, causing the dasd MIH to hit after 5 minutes. Be more aggressive in terminating I/O after setting a channel path offline. Also make sure to generate a fake irb if the device driver issues an I/O request after being notified of the killed I/O and clear residual information from the irb before trying to start the delayed verification. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] avenrun export in appdata_base.cGerald Schaefer2006-06-291-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | Remove EXPORT_SYMBOL_GPL(avenrun) from appdata_base.c, since it is already exported in kernel/timer.c Signed-off-by: Gerald Schaefer <geraldsc@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | Convert s390_collect_crw_info() in s390mach.c from being startedSerge E. Hallyn2006-06-291-3/+2
| | | | | | | | | | | | | | | | | | | | | as a deprecated kernel_thread to a kthread. Signed-off-by: Serge E. Hallyn <serue@us.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] dasd eer data format.Stefan Weinhuber2006-06-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The struct dasd_eer_header needs the packed attribute, or there will be 6 additional bytes of random data between the fixed header and the variable length part of the eer data. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] preempt_count initialization.Heiko Carstens2006-06-291-0/+1
| | | | | | | | | | | | | | | | | | | | | The preempt_count in the thread_info structure must be initialized to 1. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] head.S code moving.Heiko Carstens2006-06-293-90/+88
| | | | | | | | | | | | | | | | | | | | | | | | There is almost no room left for any new code between 0x10000 and 0x10480. Move the code from 0x10000 to 0x11000. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] dasd whitespace and other cosmetics.Horst Hummel2006-06-2915-304/+173
| | | | | | | | | | | | | | | | | | | | | | | | Dasd code cleanup: 1) remove white space, 2) remove the emacs override sections, and 3) use kzalloc instead of kmalloc. Signed-off-by: Horst Hummel <horst.hummel@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] virtual cpu accounting vs. machine checks.Martin Schwidefsky2006-06-292-41/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a machine checks interrupts the external or the i/o interrupt handler before they have completed the cpu time calculations, the accounting goes wrong. After the cpu returned from the machine check handler to the interrupted interrupt handler, a negative cpu time delta can occur. If the accumulated cpu time in lowcore is small enough this value can get negative as well. The next jiffy interrupt will pick up that negative value, shift it by 12 and add the now huge positive value to the cpu time of the process. To solve this the machine check handler is modified not to change any of the timestamps in the lowcore if the machine check interrupted kernel context. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] add __cpuinit to appldata cpu hotplug notifier.Gerald Schaefer2006-06-291-1/+1
| | | | | | | | | | | | | | | Signed-off-by: Gerald Schaefer <geraldsc@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] dasd_eckd_dump_sense bug.Horst Hummel2006-06-291-71/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ccw dump function dasd_eckd_dump_ccw_range can crash because it does not take care about the IDAL flag in the ccw. Check for IDALs flag set in CCW and follow the indirect list to print the data that is refered by the ccw. Signed-off-by: Horst Hummel <horst.hummel@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] missing check in dasd_eer_open.Stefan Weinhuber2006-06-291-0/+2
| | | | | | | | | | | | | | | | | | | | | Check the return value of kzalloc in dasd_eer_open. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] modular 3270 driver.Martin Schwidefsky2006-06-291-33/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The initial i/o to a 3270 device is done using the static module variables raw3270_init_data and raw3270_init_request. If the 3270 device driver is built as a module and gets loaded above 2GB, the initial i/o will fail because these variables will get addresses > 2GB. To make it work the two variables are moved to struct raw3270 and the data structure is allocated with GFP_DMA. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] console_unblank woes.Martin Schwidefsky2006-06-291-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The software watchdog calls machine_restart from a timer function. The s390 machine_restart calls console_unblank to flush the console output. This is needed for panic to get the panic message printed. If console_unblank is called in interrupt a BUG is triggered in acquire_console_sem. That makes the software watchdog panic instead of restarting the machine. To get around this problem the call to console_unblank is made conditionally on !in_interrupt() || oops_in_progress. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] __syscall_return error check.Heiko Carstens2006-06-291-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | Fix __syscall_return macro: valid error numbers are in the range of -1..-4095. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] cio async subchannel reprobe.Peter Oberparleiter2006-06-295-36/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | Changes in the DASD driver require an asynchronous implementation of the subchannel reprobe loop. This loop was so far only used by the blacklisting mechanism but is now available to all CCW device drivers. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] ccwgroup device unregister.Cornelia Huck2006-06-291-7/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Work around the problem that a device cannot be unregistered from driver_for_each_device() because of klist node refcounting: Get device after device owned by the driver to be unregistered with driver_find_device() and then unregister it. This works because driver_get_device() gets us out of the region of the elevated klist node refcount. driver_find_device() will always get the next device in the list after the found one has been unregistered. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] channel measurement fix.Cornelia Huck2006-06-291-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | Specify correct sizeof() in chp_measurement_read() and return correct amount of read data. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| * | [S390] cio long busy in read configuration data.Peter Oberparleiter2006-06-291-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Trying to set a DASD root device online can fail under some circumstances with the message "Read configuration data returned error -5". The cause is that read configuration data incorrectly aborts with -EIO when it encounters a temporary busy condition at a storage server. Perform retry when encountering temporary busy conditions. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>