Jeff Garzik [Mon, 29 Mar 2004 08:17:18 +0000 (00:17 -0800)]
[PATCH] fix SATA simulation of 6-byte read/write
Here's one for -rc... either this bit is assumed on most modern drives,
or nobody uses the 6-byte commands for read/write (which is very
likely). Either way it definitely wants fixing.
Since we use the modern "LBA" method of addressing sectors, this bit
must be present in the Device register when issuing a read or write.
There are three code paths that need this bit, and only two of them
actually set it. This patch fixes the third (and apparently never used)
code path.
Russell King [Mon, 29 Mar 2004 20:48:20 +0000 (21:48 +0100)]
[ARM] Clean up coherent DMA allocator from previous changes.
- Since the coherent DMA allocator is not currently compatible with
HUGETLB, ensure that we fail at compile time should this option be
selected.
- Move struct device/dma mask handling into consistent_alloc().
- Complain if someone tries to allocate coherent memory larger than
their DMA mask will permit.
- Rename consistent_alloc() to __dma_alloc() to ensure that there
is no confusion that consistent_alloc() has gone.
- Ensure warnings and errors report the correct function name.
Russell King [Mon, 29 Mar 2004 12:16:20 +0000 (13:16 +0100)]
[ARM] Extend DMA API on ARM for DMA-able writecombining memory.
This is mainly for ARM framebuffer drivers, some of which are
presently either open-coding this functionality, or using some
internal ARM architecture function to get what they want.
Andrew Morton [Mon, 29 Mar 2004 06:52:25 +0000 (22:52 -0800)]
[PATCH] inode dirtying timestamp fix
It's a bit late in 2.6.5-rc for this, but it does fix a significant bug: for
the first five minutes after boot, prior to the jiffy wrap, /bin/sync doesn't
write all of the dirty data.
We currently record an inode's time-of-first-dirtying in the address_space.
This causes a few problems with dirty block special inodes: when the device
node for /dev/hda1 needs to be written back we bogusly inspect the timestamp
for the address_space, which belongs to a different inode.
So move the inode's dirtying time up into the inode itself.
This means that for block-special inodes, inode->dirtied_when represents the
time at which the inode itself was dirtied.
For regular files it represents the time at which the inode or its pages were
dirtied.
For blockdevs, the time-of-first-dirtying is recorded in the kernel-internal
blockdev inode. Only I_DIRTY_PAGES makes sense on these inodes.
The reason all this works is that when dirtying a page we always run
__mark_inode_dirty(page->mapping->host);
which refers to the kernel-internal blockdev inode.
Andrew Morton [Mon, 29 Mar 2004 06:51:01 +0000 (22:51 -0800)]
[PATCH] cciss: return -ENXIO on no-device-present
From: mike.miller@hp.com
If no device is attached we now return -ENXIO instead of some bogus
numbers. Prevents applications from trying to access non-existent disks.
Also adds HDIO_GETGEO_BIG IOCTL that fdisk uses.
Andrew Morton [Mon, 29 Mar 2004 06:50:46 +0000 (22:50 -0800)]
[PATCH] cciss: support MSA30 storage enclosures
From: <mike.miller@hp.com>
This change is required to support the new MSA30 storage enclosure. If you
do a SCSI inquiry to a SATA disk bad things happen. This patch prevents
the inquiry from going to SATA disks.
Andrew Morton [Mon, 29 Mar 2004 06:49:51 +0000 (22:49 -0800)]
[PATCH] Fix slab creation/destruction vs. CPU Hotplug
From: Rusty Russell <rusty@rustcorp.com.au>
From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
Hit a couple of (cpu hotplug) races in slab allocator during my tests.
Mostly it was because of continuous loading/unloading fs/minix/minix.ko
while simultaneously doing offline/online of CPUs. As part of its init and
exit routines, minix.ko create/destroys caches, which lead to several
oopses.
1. kmem_cache_create
In brief, kmem_cache_create does:
a) calls enable_cpucache to create per-cpu cache for all
online CPUs.
b) adds the cache to the global list of caches
These two are not done atomically and thats what causes problems.
For ex: lets say that at the time of step a) CPU1 is not online.
Hence no per-cpu cache is created for CPU1 (cachep->array[1] is NULL).
However CPU1 is not completely dead in the sense that CPU_DEAD
processing for it is not yet over. By the time CPU_DEAD processing
starts for CPU1, step b) is complete. So cpuup_callback finds this
cache and tries freeing it's per-cpu cache associated with CPU1.
In the process it dereferences a NULL pointer and dies.
2. kmem_cache_destroy
In brief, kmem_cache_destroy does:
a) deletes the cache from the global list of caches
b) Drain per-cpu cache (drain_cpu_caches), which
basically uses smp_call_function to run do_drain
on all online CPUs.
One possible race is let's say that CPU1 is coming up.
By the time CPU_UP_PREPARE is processed for CPU1, step a) is
complete. Hence cpuup_callback does not allocate any per-cpu cache
for the cache that is being destroyed.
However by the time step b) is run, CPU1 is completely online
(taking interrupts). It receives the IPI and tries draining
it per-cpu cache (which is NULL) and dies there.
I think we need to serialize kmem_cache_create/destroy against CPU hotplug
to prevent these problems. Patch below does that by taking CPU Hotplug sem
(which is OK since kmem_cache_create/destroy are not very frequently
used?).
Andrew Morton [Mon, 29 Mar 2004 06:49:35 +0000 (22:49 -0800)]
[PATCH] Fix posix scheduling violation for !SCHED_OTHER
From: Joe Korty <joe.korty@ccur.com>
The following fixes a problem where a SCHED_FIFO task would on occasion be
moved to the end of its runqueue when returned to from a preemption. Cause
was due to some SCHED_OTHER code in schedule() which was being run for tasks
of every policy.
rmmod'ing pmac_zilog currently oopses because uart_unregister_driver(),
which nullifies drv->tty_driver, is called before uart_remove_one_port(),
which uses said drv->tty_driver.
The comment at top of uart_unregister_driver() specifically says we have
to have removed all our ports via uart_remove_one_port() before.
[PATCH] ppc64: syscall error test incorrect for 64 bits results
The syscall return path on ppc64 checks if the error is between
-LAST_ERRNO and 0, if it is, does the usual inversion along with
setting a CR bit indicating to glibc that an error occured.
However, we had an interesting bug where we used a 32 bits logica
(unsigned) comparison, thus possibly doing false positives for
valid 64 bits unsigned values whose low 32 bits happen to be in
the error range.
[PATCH] Add BINFMT_MISC docs for Mono .NET-based binaries
Just as there is documentation for BINFMT_MISC and Java bytecodes
support, I thought it could be interesting to add documentation on how
to add BINFMT_MISC support for directly running .NET ".exe" binaries
using the Mono CLR.
This patch fixes more cases of possible preempt issue when testing
MSR for FP or VEC bits and then doing giveup_fpu or giveup_altivec
that I missed in my previous round of fixes (bk get helps before
grepping ;)
I also change the single step and program check exceptions to not
re-enable interrupts right away on C code entry, it was useless and
would cause interesting issues with preempt & xmon
Roman Zippel [Sun, 28 Mar 2004 23:35:09 +0000 (15:35 -0800)]
[PATCH] add missing <linux/config.h>
A few asm/types.h test a config variable without including
<linux/config.h> first, which can e.g. cause different sector_t
definitions. HFS fell victim to that and broke on ppc with CONFIG_LBD
enabled. I scanned all asm/types.h and added <linux/config.h> as
necessary.
Neil Brown [Sun, 28 Mar 2004 10:33:50 +0000 (02:33 -0800)]
[PATCH] Fix bugs introduced by recent improvements to readdir_plus
- make sure cd->buffer is always inside a page - previously if an
entry fit perfectly in the remainder of a page, cd->buffer would
end up pointing past the end of that page.
- make sure num_entry_words is always correct, even on the error
path.
[PATCH] USB: Eliminate wait following interface unregistration
This patch from Alan Stern <stern@rowland.harvard.edu> fixes a bug in
the current USB code that causes khubd to hang when a device is removed
from the system, thereby preventing any future USB device changes (like
adding or removing other devices) from happening.
Both Andrew and I can easily duplicate this bug against the current -bk
tree.
It's not a perfect fix, but it works for now, and I will spend the next
week working on restructuring the code so this is handled properly.
Wim Van Sebroeck [Sat, 27 Mar 2004 18:22:20 +0000 (19:22 +0100)]
[WATCHDOG] v2.6.5-rc2 pcwd.c-patch4
Version 0.16 of pcwd.c - Changes that were made are:
* Changed the driver so that it uses an internal timer to do
the actual watchdog pinging. This way the watchdog's emulated
'heartbeat' is usuable as a module parameter. The watchdog's
heartbeat can now vary from 2 till 7200 seconds
Wim Van Sebroeck [Sat, 27 Mar 2004 16:55:39 +0000 (17:55 +0100)]
[WATCHDOG] v2.6.5-rc2 pcwd.c-patch3
Version 0.15 of pcwd.c - Changes that were made are:
* Rewrote code for exchanging commands with the ISA-PC Watchdog card
* Restructured + rewrote the init and exit code
* Added option_switches info
* Use the option_switches info to find out what the cards heartbeat is
* Added notifier support
Matthew Wilcox [Sat, 27 Mar 2004 05:42:42 +0000 (21:42 -0800)]
[PATCH] consolidate compat_sys_mount
This replaces six duplicated implementations of various quality of
sys32_mount with a shiny new compat_sys_mount().
It's been tested on parisc64 and sparc64 and fixes a bug exposed by the
latest revision of Debian's initscripts. Thanks to Arnd Bergmann and
Dave Miller for their suggestions, fixes and testing. Please apply.
Andrew Morton [Sat, 27 Mar 2004 05:02:33 +0000 (21:02 -0800)]
[PATCH] Remove <asm/setup.h> from cmdlinepart.c
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
Remove include of <asm/setup.h> from cmdlinepart.c. This is not be needed
for i386 (it builds fine with this patch), and ia64 doesn't supply a
setup.h.
asm/setup.h contains a hodge-podge of stuff with no real
consistency between architectures. It appears to be
included mainly by arch-specific drivers:
acsi (Atari disks)
amiflop (Amiga floppy)
z2ram (ZorroII ram disk)
amiserial (Amiga serial)
...
and under arch-specific #ifdefs:
fbcon (under __mc68000__ or CONFIG_APUS)
fonts (ditto)
logo (CONFIG_M68K)
...
Andrew Morton [Sat, 27 Mar 2004 05:02:21 +0000 (21:02 -0800)]
[PATCH] Fix uninitialized data in EFI RTC /proc interface
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
The problem is that we don't clear out the efi_time_t buffer before asking
EFI to fill it in. EFI doesn't always write the entire buffer (in
particular, the alarm time only supports one second resolution, so the
nanosecond field is often untouched).
The effect is that 'cat /proc/driver/efirtc' shows garbage in the
nanoseconds part of the alarm time, and sometimes artifacts like bogus
alarm date and junk after the actual end of the text.
without adding an explicit check of 'err', which was previously returned
from the function rather than being checked. i.e. it would drop through
to:
out:
return err;
}
With the new code added, err can (and typically would) be overwritten with
a successful value, causing the permission check to not deny permission if
needed. The intended denial would have been logged.
Andrew Morton [Sat, 27 Mar 2004 05:01:55 +0000 (21:01 -0800)]
[PATCH] adjuct cpu_khz in response to cpufreq changes
From: john stultz <johnstul@us.ibm.com>
This patch ensures that cpu_khz is adjusted on cpufreq notifications even
when the tsc timesource is not in use. It fixes the mostly cosmetic issue
when using the ACPI PM timesource of /proc/cpuinfo not being properly
updated when cpu frequency was lowered.
Andrew Morton [Sat, 27 Mar 2004 05:01:29 +0000 (21:01 -0800)]
[PATCH] s390: system call speedup part 1.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
The purpose of this is to speed up system calls on s390. I managed to
squeeze about 65 cycles from each system call. This improved e.g. getpid()
from 232 to 157 cycles. As a nice side-effect it simplified the uaccess
functions considerably.
Andrew Morton [Sat, 27 Mar 2004 05:01:16 +0000 (21:01 -0800)]
[PATCH] s390: tape driver.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
s390 tape driver changes:
- Prevent offline while device is in use.
- Do not use bus_id string in debug feature messages.
- Check for IS_ERR(irb) error conditions in interrupt handler.
- Fix removing tape discipline modules.
Andrew Morton [Sat, 27 Mar 2004 05:01:03 +0000 (21:01 -0800)]
[PATCH] s390: network driver.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
s390 network driver changes:
- ctc/lcs/qeth: prevent a ccw-device to be grouped multiple times.
- icuv: clear correct field in iucv_register_program if no userid is specified.
- lcs: fix online/offline cycle again.
- lcs: fix ungrouping of lcs group device. The channels of the lcs card
should be offline afterwards.
- lcs: don't do netif_stop_queue if no tx buffer is available, just
return -EBUSY and drop the packets.
Andrew Morton [Sat, 27 Mar 2004 05:00:37 +0000 (21:00 -0800)]
[PATCH] s390: dasd driver.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
dasd device driver changes:
- After a state change interrupt restart all running i/o on queue
and reset device timer.
- Improve some debug messages.
- Lower timeout of reserve/release/steal_lock to 2 seconds.
- Fix BIODASDPSRD ioctl.
- Replace ro_flag, use_diag_flag and disconnect_error_flag words by bits.
- Use BLKPG_DEL_PARTITION ioctl instead of a call to delete_partition because
delete_partition is not an exported function. Since dasd_destroy_partitions
can't do blkdev_get because dasd_open would fail, keep the block device
open as long as partitions exist. This in turn requires a different
approach to the open vs. offline race.
Andrew Morton [Sat, 27 Mar 2004 05:00:23 +0000 (21:00 -0800)]
[PATCH] s390: core fixes.
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
s390 core changes:
- Fix return type of some system call functions (long vs. int).
- Fix prototypes for compat system call handlers.
- Correct some bugs in the compat system call wrappers.
- Fix broken pointer arithmetic which causes problems with
gcc 3.4 and -march=z990
- Remove unnecessary #ifndef & optimize inline assemblies in spinlock.h.
- Improve handling of deferred condition code 1.
- New default configuration.
This fixes a problem where cy_wait_until_sent() miscalculates (calculate
-1 on a unsigned long) the "char_time" parameter passed to
schedule_timeout().
Fix that by making it a signed long, and checking for negative value.
Andi Kleen [Sat, 27 Mar 2004 04:56:44 +0000 (20:56 -0800)]
[PATCH] Emulate deviceless bridge ioctls
This helps vmware users running vmware on x86-64 - vmnet tries to set up a bridge.
Emulate these ioctls. The bridge has more ioctls on its bridge device, but these
don't seem to be needed here.
Implemented support for "wake" GPEs via interaction between
GPEs and the _PRW methods. Every GPE that is pointed to by
one or more _PRWs is identified as a WAKE GPE and by default
will no longer be enabled at runtime. Previously, we were
blindly enabling all GPEs with a corresponding _Lxx or _Exx
method - but most of these turn out to be WAKE GPEs anyway.
We believe this has been the cause of thousands of
"spurious" GPEs on some systems.
This new GPE behavior is can be reverted to the original
behavior (enable ALL GPEs at runtime) via a runtime flag.
Fixed a problem where aliased control methods could not
access objects properly. The proper scope within the
namespace was not initialized (transferred to the target of
the aliased method) before executing the target method.
Fixed a potential race condition on internal object
deletion on the return object in AcpiEvaluateObject.
Integrated a fix for resource descriptors where both
_MEM and _MTP were being extracted instead of just _MEM.
(i.e. bitmask was incorrectly too wide, 0x0F instead of 0x03.)
Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName,
preventing a fault in some cases.
Updated Notify() values for debug statements in evmisc.c
Return proper status from AcpiUtMutexInitialize,
not just simply AE_OK.
I figured the best way to stop beeing bothered by users trying to run
preempt was to fix it ;)
Here's a first batch that close some races we had when testing regs->msr
for altivec or FPU enable, then doing the giveup_* function. A preempt
in between those would have caused us to save a stale altivec or FPU
context.
The dmasound driver occasionally hangs a process on exit.
Apparently there is a possible case where the sound HW stops draining
output samples and the driver waits forever in its release() callback.
It should check for signals(), but it seems signal_pending() never
returns 1 when the process is beeing killed (implicit release() of files
on exit).
This patch adds a safety timeout to the release() function to make sure
we can at least close the driver. I'll try to find the reason we aren't
driving samples later, but it is better to have a safety just incase the
sound clock goes berserk for some reason.
This fixes some racy code in the management of asynchronous brightness
and battery requests in the via-pmu driver used on powerbooks. This
should fix some preempt related problems (there is no SMP powerbook yet :)
The ppc32 syscall entry code could access the thread info flags in a
racy way, thus potentially losing bits sets there at interrupt time or
by another CPU, like NEED_RESCHED or SIGPENDING (ouch !).
This fixes it by moving the potentially racy bit to a different field (I
preferred that rather than turning the access into an atomic operation
for performances reasons).
Russell King [Thu, 25 Mar 2004 17:58:50 +0000 (17:58 +0000)]
[ARM] Remove Anakin machine support.
Anakin has not been maintained since it was (partially) merged, and
the maintainers appear to ignore mail about it. No one appears
willing to maintain it either. However, some unrelated kernel
maintainers have been updating various files while they've been
working in the area - which is wasted work for something which
isn't maintained.
Therefore, this cset removes Anakin completely from the kernel.
Len Brown [Thu, 25 Mar 2004 12:40:31 +0000 (07:40 -0500)]
[ACPI] PCI interrupt link routing (Luming Yu)
use _PRS to determine resource type for _SRS
fixes HP Proliant servers
http://bugzilla.kernel.org/show_bug.cgi?id=1590