Patrick Mochel [Tue, 19 Aug 2003 08:26:30 +0000 (01:26 -0700)]
[power] Add flag to control suspend-to-disk behavior.
Suspend-to-disk can be handled in numerous ways, some we have control over,
and others we don't. The biggest difference is whether or not the firmware
is responsible for entering a low-power state or if the platform driver is.
The two modes are incompatible, so we enable the platform driver tell the
PM core when they register their pm_ops (via the ->pm_disk_mode) field.
If the firmware is responsible, then it will also write memory to disk,
while the kernel is otherwise responsible. However, a user may choose to
use the in-kernel suspend mechanism, even if the system supports only
the firmware mechanism. Instead of entering a low-power state, the system
will turn off (or reboot for testing).
A sysfs file -- /sys/power/disk -- is available to set the mode to one of:
'firmware'
'platform'
'shutdown'
'reboot'
The latter two are settable any time, and assume that one is using swsusp.
The other two are only settable to what the platform supports.
Russell King [Tue, 19 Aug 2003 20:46:33 +0000 (21:46 +0100)]
[ARM] Remove redundant CONFIG_DEBUG_INFO.
ARM had CONFIG_DEBUG_INFO for ages. Unfortunately, the new
CONFIG_DEBUG_INFO was rather blindly applied across all architectures.
This removes the duplication from the ARM architecture.
Simon Evans [Tue, 19 Aug 2003 04:08:44 +0000 (21:08 -0700)]
[PATCH] blkmtd for 2.6
This updates the blkmtd driver with the latest which has been in the MTD
CVS for quite a while. It is a rewrite from the 2.4 version to work
with the new block layer changes.
Arnd Bergmann [Tue, 19 Aug 2003 03:33:51 +0000 (20:33 -0700)]
[PATCH] correct local_dec on some architectures
A small bug in local.h apparently got copied a few times.
I noticed this because I copied the same bug to s390.
This patch should fix the occurrences in BK, but there
are others that are not merged yet, e.g. ppc64 in -mm3.
Adam Belay [Tue, 19 Aug 2003 03:14:46 +0000 (20:14 -0700)]
[PATCH] Fix awe PnP probing
This is a rewrite of the awe_wave detection code that will allow this
driver to be compiled. It moves detection functions to a common
location at the end of the file and makes the code driver-model
compatible. Also it fixes a bug in which the driver could possibly
write to incorrect ports when using isapnp cards.
Unfortunantly I do not currently have an AWE32 to test these changes so
I could only check for compilation and driver registration.
Andi Kleen [Tue, 19 Aug 2003 03:06:09 +0000 (20:06 -0700)]
[PATCH] Fix ugly hole in x86-64 interrupt gates
There was a quite nasty long standing bug in the x86-64 port. The
interrupt gates had a DPL of 3, allowing user space to trigger any
interrupt. I have not found a way to exploit it this to crash the
kernel, but it definitely shouldn't happen. It could e.g. cause
problems with drivers that do not handle shared interrupt properly.
This also broke some programs who assumed that int <random number>
causes a signal.
Linus Torvalds [Tue, 19 Aug 2003 03:02:21 +0000 (20:02 -0700)]
The default ARCH_SI_BAND_T should be "int", since that is what
Linux historically has had. Only x86-64 uses anything else, so
make the special case be _there_.
Marc Zyngier [Tue, 19 Aug 2003 02:34:16 +0000 (19:34 -0700)]
[PATCH] EISA bus update
- Don't leave resource name uninitialized if CONFIG_EISA_NAME is not set.
- Print root device bus_id (so we know which bridge is probed).
- From Zwane Mwaikambo : Add a release method to virtual root, so it
stays quiet if probing fails (because some pci-eisa bridge have been
found before).
Andrew Morton [Tue, 19 Aug 2003 01:34:11 +0000 (18:34 -0700)]
[PATCH] loop: fix module unload oops
From: Peter Osterlund <petero2@telia.com>
It oopses on module unload in the kobject layer due to misordered destruction
of things.
And we need to initialise the unplug timer in blk_alloc_queue(), because we
kill that timer in blk_alloc_queue()'s companion function,
blk_cleanup_queue().
Andrew Morton [Tue, 19 Aug 2003 01:33:30 +0000 (18:33 -0700)]
[PATCH] Fix SELinux avc_log_lock
From: Stephen Smalley <sds@epoch.ncsc.mil>
This patch fixes a bug in the SELinux access vector cache code, which was
incorrectly using spin_lock_irq rather than spin_lock_irqsave for the
avc_log_lock. As this code can be called from hardirq (e.g. from the
file_send_sigiotask hook), we need irqsave/restore here.
Currently, a writepage() which detects that it is writing outside i_size (due
to concurrent truncate) will abandon the write, returning -EIO.
The return value will bogusly cause an error to be recorded in the
address_space. So convert all those writepage() instances to return zero in
this case.
Andrew Morton [Tue, 19 Aug 2003 01:32:46 +0000 (18:32 -0700)]
[PATCH] async write errors: report truncate and io errors on
From: Oliver Xymoron <oxymoron@waste.org>
These patches add the infrastructure for reporting asynchronous write errors
to block devices to userspace. Error which are detected due to pdflush or VM
writeout are reported at the next fsync, fdatasync, or msync on the given
file, and on close if the error occurs in time.
We do this by propagating any errors into page->mapping->error when they are
detected. In fsync(), msync(), fdatasync() and close() we return that error
and zero it out.
The Open Group say close() _may_ fail if an I/O error occurred while reading
from or writing to the file system. Well, in this implementation close() can
return -EIO or -ENOSPC. And in that case it will succeed, not fail - perhaps
that is what they meant.
There are three patches in this series and testing has only been performed
with all three applied.
Andrew Morton [Tue, 19 Aug 2003 01:32:37 +0000 (18:32 -0700)]
[PATCH] Local APIC enable fixes
From: mikep@csd.uu.se
There has been a number of problem reports about local APIC
interacting badly with ACPI on P4s due to the P4 local APIC
force-enable change in 2.5.74,
This patch reverts the 2.5.74 patch, so if the BIOS disables
the local APIC on a P4, we don't enable it by default any more.
The rescue the situation for those P4 systems where the local
APIC _can_ be enabled safely, I've added two kernel parameters
that can be used to override broken BIOSen:
- "nolapic" prevents the kernel from enabling or using the local
APIC. This is stronger than listing a machine in the DMI scan
blacklist, since it also works for machines that boot with the
local APIC already enabled.
- "lapic" tells the kernel to force-enable the P4 local APIC if
the BIOS disabled it. I haven't changed the logic for P6/K7
family processors, so we still force-enable those unless
"nolapic" was passed to the kernel.
The patch also includes a cleanup: the dont_use_local_apic_timer
flag variable is not set any more since 2.5.74, so it's removed.
really enables the APIC even if BIOS disabled it. Unfortunately,
enabling APIC really does not seem to work on this ASUS laptop and ACPI
(which is mandatory) crash the kernel in ACPI code at boot time while
"Executing all Devices _STA and_INIT methods"
Unless someones find a bug in ACPI code related to APIC management, It
is safer to add this machine in the DMI black list (along with DELL,
IBM, ...).
So, as suggested by the author of the problematic change, I added and
entry in the DMI black list. But my guess is that most laptop will soon
be present in this list....
Andrew Morton [Tue, 19 Aug 2003 01:32:18 +0000 (18:32 -0700)]
[PATCH] signal handling race condition causing reboot hangs
From: Ernie Petrides <petrides@redhat.com>
(I can't get anyone to review this, but I'm sure there's a bug in there, and
Ernie's patch has been in -mm for some time).
There is a long-standing locking hole in the kernel's handling of the
signals related to stopping and resuming processes. When a process
handles SIGSTOP, SIGTSTP, SIGTTIN, or SIGTTOU, the "sighand" lock is
held while the signal is dequeued and appropriate masks are updated.
But the "sighand" lock is dropped in several cases before the task's
state is changed to TASK_STOPPED (or before a group-stop is initiated).
If a process running on another cpu posts a SIGCONT or SIGKILL just after
the "victim" process releases the lock but before its state is set to
TASK_STOPPED, the corresponding wakeup will be lost and the victim will
remain stopped despite the successive SIGCONT or SIGKILL. In this case,
a repeated posting of SIGCONT or SIGKILL will have no effect, since the
original one is already pending (and so causes a repeated posting to be
discarded). The occurrence of a SIGSTOP/SIGKILL race where the victim
has blocked all other signals will result in an unkillable process.
Although a fabricated test program can reproduce a SIGSTOP/SIGCONT race
hang in less than a minute (on a 2-cpu Dell Precision 450), the scenario
that has been most frequently encountered is a hang during reboot or
shutdown. This occurs because /sbin/killall5 brackets the scanning of
/proc/* and associated signal posting to (most) of the processes still
running with kill(-1, SIGSTOP) and kill(-1, SIGCONT) calls to temporarily
freeze every process except for "init". Occasionally, its parent (running
the /etc/rc6.d/S01reboot shell script) gets stuck in TASK_STOPPED state
with pending SIGCONT and SIGCLD signals, but with no other process left
to wake it up.
In order to fix the race condition, the locking in do_signal_stop()
and get_signal_to_deliver() needed reworking to close the hole. Due
to lock ordering issues between the "sighand" lock and tasklist_lock,
there are two cases where the former lock needs to be released and
then reacquired, thus allowing a tiny hole for a SIGCONT/SIGKILL to
be posted. These two cases are resolved by rechecking for a pending
SIGCONT/SIGKILL after the locks are (re)acquired in the proper order.
Anyone wanting a copy of the test program may e-mail me off-list.
Simon Kelley [Mon, 18 Aug 2003 20:04:11 +0000 (16:04 -0400)]
[wireless atmel] minor updates
1) Add another card to the PCMCIA card database.
2) Fix a bug in wireless extensions.
3) Remove extra code for compilation without the firmware loader
4) force-enable CRC32 and FW_LOADER in Kconfig.
Andrew Morton [Mon, 18 Aug 2003 13:43:55 +0000 (06:43 -0700)]
[PATCH] cpumask_t: allow more than BITS_PER_LONG CPUs
From: William Lee Irwin III <wli@holomorphy.com>
Contributions from:
Jan Dittmer <jdittmer@sfhq.hn.org>
Arnd Bergmann <arnd@arndb.de>
"Bryan O'Sullivan" <bos@serpentine.com>
"David S. Miller" <davem@redhat.com>
Badari Pulavarty <pbadari@us.ibm.com>
"Martin J. Bligh" <mbligh@aracnet.com>
Zwane Mwaikambo <zwane@linuxpower.ca>
It has ben tested on x86, sparc64, x86_64, ia64 (I think), ppc and ppc64.
cpumask_t enables systems with NR_CPUS > BITS_PER_LONG to utilize all their
cpus by creating an abstract data type dedicated to representing cpu
bitmasks, similar to fd sets from userspace, and sweeping the appropriate
code to update callers to the access API. The fd set-like structure is
according to Linus' own suggestion; the macro calling convention to ambiguate
representations with minimal code impact is my own invention.
Specifically, a new set of inline functions for manipulating arbitrary-width
bitmaps is introduced with a relatively simple implementation, in tandem with
a new data type representing bitmaps of width NR_CPUS, cpumask_t, whose
accessor functions are defined in terms of the bitmap manipulation inlines.
This bitmap ADT found an additional use in i386 arch code handling sparse
physical APIC ID's, which was convenient to use in this case as the
accounting structure was required to be wider to accommodate the physids
consumed by larger numbers of cpus.
For the sake of simplicity and low code impact, these cpu bitmasks are passed
primarily by value; however, an additional set of accessors along with an
auxiliary data type with const call-by-reference semantics is provided to
address performance concerns raised in connection with very large systems,
such as SGI's larger models, where copying and call-by-value overhead would
be prohibitive. Few (if any) users of the call-by-reference API are
immediately introduced.
Also, in order to avoid calling convention overhead on architectures where
structures are required to be passed by value, NR_CPUS <= BITS_PER_LONG is
special-cased so that cpumask_t falls back to an unsigned long and the
accessors perform the usual bit twiddling on unsigned longs as opposed to
arrays thereof. Audits were done with the structure overhead in-place,
restoring this special-casing only afterward so as to ensure a more complete
API conversion while undergoing the majority of its end-user exposure in -mm.
More -mm's were shipped after its restoration to be sure that was tested,
too.
The immediate users of this functionality are Sun sparc64 systems, SGI mips64
and ia64 systems, and IBM ia32, ppc64, and s390 systems. Of these, only the
ppc64 machines needing the functionality have yet to be released; all others
have had systems requiring it for full functionality for at least 6 months,
and in some cases, since the initial Linux port to the affected architecture.
Patrick Mochel [Mon, 18 Aug 2003 09:40:36 +0000 (02:40 -0700)]
[power] Improve suspend sequence.
- Expand pm_power_down() into struct pm_ops, with ->prepare(), ->enter()
and ->finish() methods, so the platform drivers get called to do start
and stop work during suspend sequence.
- Make sure devices are suspended/resumed in enter_state(), and that they
are powered down in pm_suspend_mem() and pm_suspend_standby().
- Call ->prepare() in suspend_prepare() and ->finish() in suspend_finish().
Albert Cahalan [Mon, 18 Aug 2003 05:32:22 +0000 (22:32 -0700)]
[PATCH] reduce diff between x86-64 & i386
This cleans up ioport.c to use BITS_PER_LONG, sizeof, and so on. This
makes it easier to spot the differences that matter, and thus easier to
find bugs.