Yes it's a GCC optimiser bug. I'm surprised I didn't see it: I tried
a whole heap of different compilers on that code, and had problems
only on the earlier similar code in raid0_run().
I didn't try redhat's compilers (I run debian) but didn't expect the
behaviour to be that different.
Anyway, please apply this patch (which also fixes the chunk overlap
problems).
Tim Wright [Tue, 15 Oct 2002 12:11:13 +0000 (05:11 -0700)]
[PATCH] Forward port of 2.4 fsync_buffers_list() fix.
there was a bug in fysnc_buffers_list() in 2.4 (fixed in 2.4.19) that
could cause the function to return without having written the current
contents of all the buffers.
Obviously, this could be bad for anybody relying on ordering using
O_SYNC or fsync(). If an I/O was already in flight for a particular bh
at the time of the call to fsync_buffers_list(), ll_rw_block() will not
initiate a new I/O even though the contents may have changed. It is
therefore necessary to wait before the call. Here's a patch against
2.5.42 that applies the same fix.
Doug Ledford [Tue, 15 Oct 2002 11:55:33 +0000 (04:55 -0700)]
[PATCH] SCSI update
drivers/scsi/esp.c:
Fix the build.
scsi.h:
Add struct list_head items for future (but soon) use
hosts.h:
Remove select_queue_depths from host struct, add struct list
stuff for proper list linking of host structs
hosts.c:
Don't touch select_queue_depths any longer
Kai Mäkisara [Tue, 15 Oct 2002 11:38:24 +0000 (04:38 -0700)]
[PATCH] SCSI tape door lock and reset fixes
- switch to using scsi_ioctl() for drive door locking and unlocking
instead of private code
- use a driver internal flag to save the reset status until tape is
positioned into known location
- set driver state properly for all partitions after reset
- change put_device() to driver_unregister() in st_detach()
- C99 initializer changes (from Art Haas)
Ingo Molnar [Tue, 15 Oct 2002 11:35:16 +0000 (04:35 -0700)]
[PATCH] futex-2.5.42-A2
This is my current futex patchset against BK-curr. It mostly includes
must-have crash/correctness fixes from Martin Wirth, tested and reworked
somewhat by myself:
- crash fix: futex_close did not detach from the vcache. Detach cleanups.
(Martin Wirth)
- memory leak fix: forgotten put_page() in a rare path in __pin_page().
(Martin Wirth)
- crash fix: do not do any quickcheck in unqueue_me(). (Martin, me)
- correctness fix: the fastpath in __pin_page() now handles reserved
pages the same way get_user_pages() does. (Martin Wirth)
- queueing improvement: __attach_vcache() now uses list_add_tail() to
avoid the reversal of the futex queue if a COW happens. (Martin Wirth)
- simplified alignment check in sys_futex. (Martin Wirth)
- comment fix: make it clear how the vcache hash quickcheck works. (me)
John Levon [Tue, 15 Oct 2002 11:30:56 +0000 (04:30 -0700)]
[PATCH] oprofile - core
Add the oprofile core. The core design is very similar to that we
discussed in private mail. The nasty details should be documented in
the patch below.
John Levon [Tue, 15 Oct 2002 11:30:38 +0000 (04:30 -0700)]
[PATCH] oprofile - timer hook
This implements a simple hook into the profiling timer for x86 so that
non-perfctr machines can still use oprofile. This has proven useful for
laptops and the like.
It also reduces header dependencies a bit by centralising readprofile
code
John Levon [Tue, 15 Oct 2002 11:30:32 +0000 (04:30 -0700)]
[PATCH] oprofile - dcookies
This implements the persistent path-to-dcookies mapping, and adds a
system call for the user-space profiler to look up the profile data, so
it can tag profiles to specific binaries.
John Levon [Tue, 15 Oct 2002 11:30:26 +0000 (04:30 -0700)]
[PATCH] oprofile - hooks
This implements the simple hooks we need to catch unmappings, and to
make sure no stale task_struct*'s are ever used by the main oprofile
core mechanism. If disabled, it compiles to nothing.
Alexander Viro [Tue, 15 Oct 2002 11:25:44 +0000 (04:25 -0700)]
[PATCH] bunch of ->open() killed.
Quite a few drivers don't need ->open() anymore - all it did was checking
that minor is good (== gendisk exists). That is handled by generic code
now...
Alexander Viro [Tue, 15 Oct 2002 11:25:37 +0000 (04:25 -0700)]
[PATCH] bdev->bd_disk introduced
There we go - now we can put a reference to gendisk into block_device. Which
we do in do_open(). Most of the callers of get_gendisk() are simply using
bdev->bd_disk now (and most of the put_disk() calls introduced on previous
step disappear). We also put that pointer into struct request - ->rq_disk.
That allows to get rid of disk_index() kludges in md.c (we simply count
relevant IO in the struct gendisk fields) and kill the export of get_gendisk().
Notice that by now we can move _all_ IO counters into gendisk. That
will kill a bunch of per-major arrays and more importantly, allow to merge
sard in clean way. FWIW, we probably could show them as disk/partitions
attributes in driverfs...
Alexander Viro [Tue, 15 Oct 2002 11:25:32 +0000 (04:25 -0700)]
[PATCH] refcounts for gendisks
Finally. We use disk->dev.refcount as a gendisk refcount. New helper -
get_disk(): atomic_inc on refcount. get_gendisk() does it on return,
callers of get_gendisk() do put_disk() when they are done.
Alexander Viro [Tue, 15 Oct 2002 11:25:24 +0000 (04:25 -0700)]
[PATCH] preparation to use of driverfs refcounts, part 2 - disk
* disk->disk_dev is initialized in alloc_disk(), device_add()'d in
add_disk(), device_del()'d in unregister_disk() and device_put() in
put_disk().
* devices of partitions are made its children.
* attributes of disk one: dev (dev_t of the thing), range (number of
minors) and size (in sectors).
* attributes of partition ones: dev (ditto), start (in sectors) and
size (in sectors).
* disk devices are put on a new bus - "block"
* if caller of add_disk() had set disk->driverfs_dev, we set symlinks:
"device" from disk to underlying device and "block" from underlying
device to disk.
* ->release() of disk_dev frees disk and disk->part.
At that point we have sane driverfs subtree for each gendisk and
refcount of its root (disk->disk_dev) can act as gendisk refcount.
Alexander Viro [Tue, 15 Oct 2002 11:25:18 +0000 (04:25 -0700)]
[PATCH] preparation to use of driverfs refcounts, part 1 - partitions
* update_partition() split into add_partition() and delete_partition().
* all updating of ->part[] is switched to these two (including initial
filling/final cleaning).
* per-partition devices are allocated on-demand and never reused.
We allocate struct device in add_partition() and put reference to it into
hd_struct. ->release() for that struct device frees it. delete_partition()
removes reference from hd_struct and does put_device() on it. Basically,
we get rid of problems with reused struct device by never reusing them...
At that point devices for partitions are nice and sane.
Alexander Viro [Tue, 15 Oct 2002 11:23:37 +0000 (04:23 -0700)]
[PATCH] device_register() splitup
new driverfs helpers - device_initialize/device_add and device_del.
The latter is device_unregister() sans the final put_device(). The former
is splitup of device_register() into initialization and insertion into tree.
Russell King [Mon, 14 Oct 2002 22:25:35 +0000 (23:25 +0100)]
[MTD] Update 2.5 MTD code from MTD CVS and ARM tree
This cset updates the 2.5 MTD code from the MTD CVS. David Woodhouse
is happy with me sending this.
Summary of changes:
- Add MTD device concatenation support module.
- Bootldr MTD partition parsing is obsolete, replaced by command-line
based partition information.
- Add support for ARM map drivers:
AUTCPU12, Ceiva, Camelot, Fortunet, edb7312, Impa7, PCI
- Add support for PCMCIA memory cards
- Update help texts for:
Ocelot, ITE QED-4N-S01B, Flaga
Please note that this does not completely synchronise the 2.5 kernel
tree with MTD CVS.
Jeff Dike [Mon, 14 Oct 2002 05:53:55 +0000 (01:53 -0400)]
This is the merge of the initial 2.4 SMP support.
Locking was added where necessary.
All processors take timer interrupts, but only CPU 0 calls the timer
IRQ. The others just call update_process_times to keep the
accounting straight.
The timer interrupt is blocked along with the other signals.
Consistent naming for Bluetooth function and constants.
Some of them were named like BT_XXX and bt_xxx others BLUEZ_XXX and bluez_xxx.
From now on use BT_XXX and bt_xxx throughout Bluetooth code, including CONFIG_ defines.
Clean up small typos and misspelling along the way.
Now that the module name bluetooth.o is not used by USB subsystem anymore
we can rename bluez.o to what it should have been from the begging
bluetoth.o
Jeff Dike [Sun, 13 Oct 2002 19:41:50 +0000 (15:41 -0400)]
Cleaned up a bunch of things noticed while merging the SMP support.
The tempfile code is in its own file.
A bunch of unused stuff is now gone.
A bunch of code that could be called from the tracing thread was
made safe for that to happen.
Andrew Morton [Sun, 13 Oct 2002 09:59:10 +0000 (02:59 -0700)]
[PATCH] remove kiobufs
This patch from Christoph Hellwig removes the kiobuf/kiovec
infrastructure.
This affects three subsystems:
video-buf.c:
This patch includes an earlier diff from Gerd which converts
video-buf.c to use get_user_pages() directly.
Gerd has acked this patch.
LVM1:
Is now even more broken.
drivers/mtd/devices/blkmtd.c:
blkmtd is broken by this change. I contacted Simon Evans, who
said "I had done a rewrite of blkmtd anyway and just need to convert
it to BIO. Feel free to break it in the 2.5 tree, it will force me
to finish my code."
Neither EVMS nor LVM2 use kiobufs. The only remaining breakage
of which I am aware is a proprietary MPEG2 streaming module. It
could use get_user_pages().
Andrew Morton [Sun, 13 Oct 2002 09:58:45 +0000 (02:58 -0700)]
[PATCH] batched slab shrink and registration API
From Ed Tomlinson, then mauled by yours truly.
The current shrinking of the dentry, inode and dquot caches seems to
work OK, but it is slightly CPU-inefficient: we call the shrinking
functions many times, for tiny numbers of objects.
So here, we just batch that up - shrinking happens at the same rate but
we perform it in larger units of work.
To do this, we need a way of knowing how many objects are currently in
use by individual caches. slab does not actually track this
information, but the existing shrinkable caches do have this on hand.
So rather than adding the counters to slab, we require that the
shrinker callback functions keep their own count - we query that via
the callback.
We add a simple registration API which is exported to modules. A
subsystem may register its own callback function via set_shrinker().
set_shrinker() simply takes a function pointer. The function is called
with
int (*shrinker)(int nr_to_shrink, unsigned int gfp_mask);
The shrinker callback must scan `nr_to_scan' objects and free all
freeable scanned objects. Note: it doesn't have to *free* `nr_to_scan'
objects. It need only scan that many. Which is a fairly pedantic
detail, really.
The shrinker callback must return the number of objects which are in
its cache at the end of the scanning attempt. It will be called with
nr_to_scan == 0 when we're just querying the cache size.
The set_shrinker() registration API is passed a hint as to how many
disk seeks a single cache object is worth. Everything uses "2" at
present.
I saw no need to add the traditional `here is my void *data' to the
registration/callback. Because there is a one-to-one relationship
between caches and their shrinkers.
Various cleanups became possible:
- shrink_icache_memory() is no longer exported to modules.
- shrink_icache_memory() is now static to fs/inode.c
- prune_icache() is now static to fs/inode.c, and made inline (single caller)
- shrink_dcache_memory() is made static to fs/dcache.c
- prune_dcache() is no longer exported to modules
- prune_dcache() is made static to fs/dcache.c
- shrink_dqcache_memory() is made static to fs/dquot.c
- All the quota init code has been moved from fs/dcache.c into fs/dquot.c
- All modifications to inodes_stat.nr_inodes are now inside
inode_lock - the dispose_list one was racy.
David Brownell [Sun, 13 Oct 2002 08:40:00 +0000 (01:40 -0700)]
[PATCH] usbcore doc + minor fixes
Cleaning out my queue of most minor patches:
- Provides some kerneldoc for 'struct usb_interface' now that
the API is highlighting it.
- Fixes usb_set_interface() so it doesn't affect other interfaces.
This provides the right place for an eventual HCD call to clean
out now-invalid records of endpoint state, and also gets rid of
a potential SMP issue where drivers on different interfaces
calling concurrently could clobber each other. (Per-interface
data doesn't need locking except against config changes.)
- It's OK to pass URB_NO_INTERRUPT hints if you're queueing a
bunch of interrupt transfers.
The set_interface call should eventually take the interface as a
parameter, it's one of the few left using the "device plus magic
number" identifier. I have a partial patch for that, but it doesn't
handle the (newish) ALSA usb audio driver or a few other callers.
Russell King [Sun, 13 Oct 2002 19:52:13 +0000 (20:52 +0100)]
[ARM] Update AFS mtd partition parsing.
This updates AFS mtd partition parsing to the current CVS version:
- Don't recognise the AFS SIB as a partition
- Ensure initialisation of afs mtdpart structures.
Russell King [Sun, 13 Oct 2002 17:42:09 +0000 (18:42 +0100)]
[ARM] Make the assabet machine always use the same uart mapping.
Traditionally, the Assabet reverses its mapping of UART1 and UART3
when the Neponset board is connected. This can be (a) confusing
and (b) annoying when the boot loader uses UART1. We therefore
have a fixed mapping between the ttySA names and the physical
UARTs on this platform.
Russell King [Sun, 13 Oct 2002 17:36:03 +0000 (18:36 +0100)]
[ARM] Convert sa1100 PCMCIA drivers to C99 initializers (Art Haas)
The patches convert drivers/pcmcia to use C99 named initializers,
and all the patches are against 2.5.42. There are 25 patches in
total, and the "cat"ing them together they're more that 20K, so
I'm sending the patches as a compressed attachment. The patches
were CC'd to Linus in the first mail that bounced.
Russell King [Sun, 13 Oct 2002 17:28:03 +0000 (18:28 +0100)]
[ARM ADFS] C99 designated initialisers (Patch from Art Haas)
Here's a small set of patches that switch the code to use C99
desiginated initializers. Patches are against 2.5.42.
Russell King [Sun, 13 Oct 2002 17:02:58 +0000 (18:02 +0100)]
[ARM] Update acorn scsi code wrt global irq and bitops
This cset removes the global irq handling in the AcornSCSI driver,
and makes the target type for bitops an unsigned long array rather
than an unsigned char array.
Russell King [Sun, 13 Oct 2002 16:49:52 +0000 (17:49 +0100)]
[ARM] Convert boot-time memory permission selection to table.
This removes a compilation warning and makes the code smaller.
It is also more obvious what's going on.
Russell King [Sun, 13 Oct 2002 16:43:23 +0000 (17:43 +0100)]
[ARM] Remove non-existent USB gadget code from mach-sa1100/Makefile
The USB gadget code now lives in arch/arm/mach-sa1100/usb, and
isn't in a mergable state. We remove the old makefile entries
which are never going to be satisfied, and leave a placeholder for
the usb directory.
Russell King [Sun, 13 Oct 2002 16:38:43 +0000 (17:38 +0100)]
[ARM] dump_stack and show_trace_task
dump_stack() got used by the generic code. Call our version
__dump_stack since we're running out of other descriptive names.
Allow show_trace_task to show the backtrace for the current
thread.
Russell King [Sun, 13 Oct 2002 16:32:58 +0000 (17:32 +0100)]
[ARM] Rudimentary support for Thumb ptracing.
Add rudimentary support for Thumb ptracing; we aren't able to single
step through thumb branches yet, but this change provides enough
infrastructure to make this possible.
Russell King [Sun, 13 Oct 2002 16:08:51 +0000 (17:08 +0100)]
[ARM] Fix up NCR5380-based Acorn SCSI drivers
This cset updates (as much as is possible) the NCR5380-based Acorn
SCSI drivers, mainly converting them to the new error handling code.
However, they still don't build due to errors in NCR5380.
Russell King [Sun, 13 Oct 2002 15:57:58 +0000 (16:57 +0100)]
[ARM] Remove old Acorn iomd-based keyboard and mouse drivers.
Vojtech has patches that bring their counterparts in the input
subsystem up to date (and into a working state) so these drivers
are no longer required.
Russell King [Sun, 13 Oct 2002 15:34:28 +0000 (16:34 +0100)]
[ARM] Acorn serial port driver update
This cset combines the Atomwide and The Serial Port 16550 driver
modules into one "8250_acorn.c" driver. This new module takes full
advantage of the LDM-based expansion card facilities.
Russell King [Sun, 13 Oct 2002 15:17:51 +0000 (16:17 +0100)]
[ARM] Update Acorn ethernet expansion cards
This cset implements validity checks on the ethernet MAC address when
the device is opened, and refuses to open the device if this check
fails. We also provide the set_mac_address method to allow ifconfig
to change the mac address to something valid.
In addition, the driver is converted from the old expansion card
discovery methods to the new device model driver framework.
Russell King [Sun, 13 Oct 2002 14:35:29 +0000 (15:35 +0100)]
Convert acorn expansion card probing code to the Linux device model.
Provide LDM-based driver registration/removal interface for drivers
to use. We make the old device discovery code ignore devices
claimed via the LDM framework. However, the LDM framework ignores
devices that may be in use by the old device discovery code. This
is fine since the only devices that will still use the old discovery
code will be SCSI drivers.
Currently, we don't provide a useful dev.name entry.
Russell King [Sun, 13 Oct 2002 13:32:13 +0000 (14:32 +0100)]
[ARM] cpufreq updates for ARM
This updates the Integrator cpufreq code to use the new interfaces,
and makes the sa1100 cpufreq round up the requested frequency.