07 Feb, 2008
1 commit
-
calibrate_delay() must be __cpuinit, not __{dev,}init.
I've verified that this is correct for all users.
While doing the latter, I also did the following cleanups:
- remove pointless additional prototypes in C files
- ensure all users #includeThis fixes the following section mismatches with CONFIG_HOTPLUG=n,
CONFIG_HOTPLUG_CPU=y:WARNING: vmlinux.o(.text+0x1128d): Section mismatch: reference to .init.text.1:calibrate_delay (between 'check_cx686_slop' and 'set_cx86_reorder')
WARNING: vmlinux.o(.text+0x25102): Section mismatch: reference to .init.text.1:calibrate_delay (between 'smp_callin' and 'cpu_coregroup_map')Signed-off-by: Adrian Bunk
Cc: Ivan Kokshaysky
Cc: Richard Henderson
Cc: "Luck, Tony"
Cc: Ralf Baechle
Cc: Paul Mackerras
Cc: Benjamin Herrenschmidt
Cc: "David S. Miller"
Cc: Thomas Gleixner
Cc: Ingo Molnar
Cc: Christian Zankel
Cc: Heiko Carstens
Cc: Martin Schwidefsky
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
05 Feb, 2008
7 commits
-
In case a dcss segment cannot be loaded blk_cleanup_queue
will be called before blk_queue_make_request, leaving the
struct work unplug_work of the request queue uninitialized
before it is used.
That leads also to the lockdep message below.
To avoid that call blk_queue_make_request right after the
request_queue has been allocated.
This makes sure that the struct work is always initialized
before it is used.INFO: trying to register non-static key.
the code is fine but needs lockdep annotation.
turning off the locking correctness validator.
CPU: 2 Not tainted 2.6.24 #6
Process swapper (pid: 1, task: 000000000f854038, ksp: 000000000f85f980)
040000000f85f860 000000000f85f880 0000000000000002 0000000000000000
000000000f85f920 000000000f85f898 000000000f85f898 000000000001622e
0000000000000000 000000000f85f980 0000000000000000 0000000000000000
000000000f85f880 000000000000000c 000000000f85f880 000000000f85f8f0
0000000000342908 000000000001622e 000000000f85f880 000000000f85f8d0
Call Trace:
([] show_trace+0xda/0x104)
[] show_stack+0xc0/0xf8
[] dump_stack+0xb0/0xc0
[] __lock_acquire+0x47e/0x1160
[] lock_acquire+0xb0/0xd8
[] __cancel_work_timer+0x9e/0x240
[] cancel_work_sync+0x2a/0x3c
[] kblockd_flush_work+0x26/0x34
[] blk_sync_queue+0x38/0x48
[] blk_release_queue+0x3c/0xa8
[] kobject_cleanup+0x58/0xac
[] kobject_release+0x2a/0x38
[] kref_put+0x6e/0x94
[] kobject_put+0x38/0x48
[] blk_put_queue+0x2a/0x38
[] blk_cleanup_queue+0x82/0x90
[] dcssblk_add_store+0x34e/0x700
[] dcssblk_init+0x1a0/0x308
[] kernel_init+0x1b2/0x3a4
[] kernel_thread_starter+0x6/0xc
[] kernel_thread_starter+0x0/0xcINFO: lockdep is turned off.
Cc: Gerald Schaefer
Cc: Carsten Otte
Signed-off-by: Heiko Carstens
Signed-off-by: Martin Schwidefsky -
Under load the following bug message appeared while using sysrq-t:
BUG: scheduling while atomic: bash/3662/0x00000004
0000000000105b74 000000003ba17740 0000000000000002 0000000000000000
000000003ba177e0 000000003ba17758 000000003ba17758 0000000000105bfe
0000000000817ba8 000000003f2a5350 0000000000000000 0000000000000000
000000003ba17740 000000000000000c 000000003ba17740 000000003ba177b0
0000000000568630 0000000000105bfe 000000003ba17740 000000003ba17790
Call Trace:
([] show_trace+0x13c/0x158)
[] show_stack+0xc8/0xfc
[] dump_stack+0x30/0x40
[] __schedule_bug+0x84/0x94
[] schedule+0x5ea/0x970
[] __sclp_vt220_write+0x1f6/0x3ec
[] sclp_vt220_con_write+0x38/0x48
[] __call_console_drivers+0xbe/0xd8
[] _call_console_drivers+0x8c/0xd0
[] release_console_sem+0x1a6/0x2fc
[] vprintk+0x262/0x480
[] printk+0x56/0x68
[] print_cfs_rq+0x45e/0x4a4
[] sched_debug_show+0x65e/0xee8
[] show_state_filter+0x1cc/0x1f0
[] sysrq_handle_showstate+0x2c/0x3c
[] __handle_sysrq+0xae/0x18c
[] write_sysrq_trigger+0x8a/0x90
[] proc_reg_write+0x9a/0xc4
[] vfs_write+0xb8/0x174
[] sys_write+0x58/0x8c
[] sysc_noemu+0x10/0x16
[] 0x20000116f68The problem seems to be, that with a full console buffer, release_console_sem
disables interrupts with spin_lock_irqsave and then calls the console function
without enabling interrupts. __sclp_vt220_write checks for in_interrupt, to
decide if it can schedule. It should check for in_atomic instead.The same is true for sclp_tty.c.
Signed-off-by: Christian Borntraeger
Signed-off-by: Martin Schwidefsky -
When an alias device is set offline while it is in use this may
result in a panic in the cleanup part of the dasd_block_tasklet.
The problem here is that there may exist some ccw requests that were
originally created for the alias device and transferred to the base
device when the alias was set offline. When these request are
cleaned up later, the discipline pointer in the alias device may not
be valid anymore. To fix this use the base device discipline to find
the cleanup function.Signed-off-by: Stefan Weinhuber
Signed-off-by: Martin Schwidefsky -
Adding interface control check (ifcc) handling in error recovery.
First retry up to 255 times and if all retries fail try an alternate
path if possible.Signed-off-by: Stefan Haberland
Signed-off-by: Martin Schwidefsky -
This intendeds to make proper shutdown of qeth devices easier.
Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
This provides unified return codes for common response codes and
also makes the debug feature messages more similar and informational.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
In some cases the current sense id procedure trips over incomplete
hardware responses. In these cases, checking against the preset value
of 0xFFFF is not enough. More critically, the VM DIAG call will always be
considered to have provided data after such an incident, even if it was not
successful at all.The solution is to always initialize the control unit data before doing a
sense id call. Check the condition code before considering the control unit
data. And initialize again, before evaluating the VM data.Signed-off-by: Peter Oberparleiter
Signed-off-by: Martin Schwidefsky
31 Jan, 2008
1 commit
-
The commit de25deb18016f66dcdede165d07654559bb332bc changed
scsi_cmnd.sense_buffer from a static array to a dynamically allocated
buffer. We can't access to sense_buffer in '&cmd->sense_buffer' way.Signed-off-by: FUJITA Tomonori
Acked-by: Christof Schmitt
Signed-off-by: James Bottomley
29 Jan, 2008
2 commits
-
Signed-off-by: Patrick McHardy
Signed-off-by: David S. Miller -
The patch extends the inet_addr_type and inet_dev_addr_type with the
network namespace pointer. That allows to access the different tables
relatively to the network namespace.The modification of the signature function is reported in all the
callers of the inet_addr_type using the pointer to the well known
init_net.Acked-by: Benjamin Thery
Acked-by: Daniel Lezcano
Signed-off-by: Eric W. Biederman
Signed-off-by: David S. Miller
28 Jan, 2008
1 commit
-
This patch converts s390 to use blk_end_request interfaces.
Related 'uptodate' arguments are converted to 'error'.As a result, the interfaces of internal functions below are changed:
o dasd_end_request
o tapeblock_end_requestCc: Martin Schwidefsky
Cc: Heiko Carstens
Cc: linux390@de.ibm.com
Signed-off-by: Kiyoshi Ueda
Signed-off-by: Jun'ichi Nomura
Signed-off-by: Jens Axboe
26 Jan, 2008
28 commits
-
Signed-off-by: Peter Tiedemann
-
Signed-off-by: Jan Engelhardt
Signed-off-by: Martin Schwidefsky -
Add time to the 'expires' value to avoid a loop caused by the cqr
termination functionSigned-off-by: Stefan Haberland
Signed-off-by: Martin Schwidefsky -
Parallel access volumes (PAV) is a storage server feature, that allows
to start multiple channel programs on the same DASD in parallel. It
defines alias devices which can be used as alternative paths to the
same disk. With the old base PAV support we only needed rudimentary
functionality in the DASD device driver. As the mapping between base
and alias devices was static, we just had to export an identifier
(uid) and could leave the combining of devices to external layers
like a device mapper multipath.
Now hyper PAV removes the requirement to dedicate alias devices to
specific base devices. Instead each alias devices can be combined with
multiple base device on a per request basis. This requires full
support by the DASD device driver as now each channel program itself
has to identify the target base device.
The changes to the dasd device driver and the ECKD discipline are:
- Separate subchannel device representation (dasd_device) from block
device representation (dasd_block). Only base devices are block
devices.
- Gather information about base and alias devices and possible
combinations.
- For each request decide which dasd_device should be used (base or
alias) and build specific channel program.
- Support summary unit checks, which allow the storage server to
upgrade / downgrade between base and hyper PAV at runtime (support
is mandatory).Signed-off-by: Stefan Weinhuber
Signed-off-by: Martin Schwidefsky -
Signed-off-by: Joe Perches
Signed-off-by: Martin Schwidefsky -
single list_head variable initialized with LIST_HEAD_INIT could almost
always can be replaced with LIST_HEAD declaration, this shrinks the code
and looks better.Signed-off-by: Denis Cheng
Signed-off-by: Martin Schwidefsky -
Signed-off-by: Joe Perches
Signed-off-by: Martin Schwidefsky -
Using the return value of ccw_device_set_online as return value for
dasd_generic_probe() causes the DASD to fail setting onlineSigned-off-by: Stefan Haberland
Signed-off-by: Martin Schwidefsky -
It caused only a lot of confusion. From now on cpu hotplug of up to
NR_CPUS will work by default. If somebody wants to limit that then
the possible_cpus parameter can be used.Signed-off-by: Heiko Carstens
Signed-off-by: Martin Schwidefsky -
Signed-off-by: Heiko Carstens
Signed-off-by: Martin Schwidefsky -
Add a new interface so that cpus can be put into standby state and
configured state.
Only offline cpus can be put into standby state or configured state.
For that the new percpu sysfs attribute "configure" must be used.
To put a cpu in standby state a "0" must be written to the attribute.
In order to switch it into configured state a "1" must be written to
the attribute.
Only cpus in configured state can be brought online.
In addition this patch introduces a static mapping of physical to
logical cpus. As a result only the sysfs directories of present cpus
will be created. To scan for new cpus the new sysfs attribute "rescan"
must be used.
Writing to /sys/devices/system/cpu/rescan will trigger a rescan of
cpus and will create directories for new cpus.On IPL only configured cpus will be used. And on reboot/shutdown all
cpus will remain in their current state (configured/standby).Signed-off-by: Heiko Carstens
Signed-off-by: Martin Schwidefsky -
Signed-off-by: Michael Ernst
Signed-off-by: Martin Schwidefsky -
Current definition of QDIO_ACTIVATE_TIMEOUT results in value 0.
Thus it may cause endless wait in function qdio_activate().Signed-off-by: Ursula Braun
Signed-off-by: Martin Schwidefsky -
Signed-off-by: Sebastian Ott
Signed-off-by: Martin Schwidefsky -
Add a timed recovery procedure to reactivate ccw devices in cases
where HW/VM events are not sufficient to allow for proper recovery
of reappearing channel paths.Signed-off-by: Peter Oberparleiter
Signed-off-by: Martin Schwidefsky -
Allocated kernel memory for locks is not freed in case of subchannel found
to be invalid.Signed-off-by: Michael Ernst
Signed-off-by: Martin Schwidefsky -
There are two ways for a ccwgroup device to be unregistered:
Via the ungroup attribute, or when on of the slave devices is killed
by a machine check. As we have to unregister the ccwgroup device
via a callback, we'll now have to check whether it hasn't been
already unregistered because of a machine check.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Make sure pending timers are always deleted, even if we don't go
through ccw_device_done().Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Minimize calls to cpu intensive function get_subchannel_by_schid()
by introducing function for_each_subchannel_staged() which
temporarily caches the information about registered subchannels
in a bitmap.Signed-off-by: Peter Oberparleiter
Signed-off-by: Martin Schwidefsky -
Set the owner field in the embedded struct device_driver to the
value provided in the {css,ccw,ccwgroup}_driver.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Also define helpers sch_{g,s}et_cdev() to make the intention more
clear.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Some fields may be !0 only for I/O subchannels. Add some checks
where required. Also adapt cio_enable_subchannel() to make the
caller specify the intparm, which makes it more generic.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
From: Cornelia Huck
Change the adapter interrupt interface in order to allow multiple
adapter interrupt handlers to be registered. Indicators are now
allocated by cio instead of the device driver.The qdio parts have been
Acked-by: Ursula BraunSigned-off-by: Peter Oberparleiter
Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Introduce a private pointer in struct subchannel to store
per-subchannel type data (cannot use dev->priv since this
is already used for something else).Create a new header io_sch.h for I/O subchannel specific structures
and instructions.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Cleanup cio_debug.h.
Also make CIO_DEBUG add the "cio:" prefix to the printk string
so that it isn't needed for the debug feature.
Fix outdated comments for cio_debug_init() and clean it up.
Enlarge cio_crw to the same size as cio_msg so we may actually
find some relevant information there.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Add wrapper functions for driver_register and driver_unregister so
that css drivers don't need to muck with struct device_driver
directly.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
sch->driver needs to be reset to NULL on failed probe and after
remove. We also need to check for sch->driver on shutdown.Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky -
Make all callbacks in css_driver take a struct subchannel (and not
a struct device).Signed-off-by: Cornelia Huck
Signed-off-by: Martin Schwidefsky