Alan Stern [Tue, 20 Jan 2004 06:50:56 +0000 (22:50 -0800)]
[PATCH] USB UHCI: fix broken data toggles for queued control URBs
This patch fixes a long-standing (albeit unidentified) problem in the
queueing code for the UHCI HCD. The code propagates data toggle settings
between messages in a queue for control transfers just the same as bulk
and interrupt transfers. That is a mistake, since control messages always
restart with data toggle 0. With this patch, the UHCI driver now passes
test 10 (control URB queueing) in David Brownell's usbtest suite.
The patch appears to change more than it really does, because it alters
the indentation level of a large section of code.
Paul Mackerras [Mon, 19 Jan 2004 13:49:29 +0000 (05:49 -0800)]
[PATCH] sort exception tables
This patch arranges for the exception tables to be sorted on most
architectures. It sorts the main kernel exception table on startup
and the module exception tables when they get loaded. The main table
is sorted reasonably early - just after kmem_cache_init - but that
could be moved even earlier if necessary.
There is now a lib/extable.c which includes the sort_extable()
function from arch/ppc/mm/extable.c and the search_extable() function
from arch/i386/mm/extable.c, which had been copied to many
architectures. On many architectures, arch/$(ARCH)/mm/extable.c
became empty and so I have removed it.
There are four architectures which do things differently from i386:
alpha, ia64, sparc and sparc64. Alpha and ia64 store the offset from
the offset from the exception table entry to the instruction, and
sparc and sparc64 have range entries in the table. For those
architectures I have added empty sort_extable functions. The
maintainers for those architectures can implement something better if
they care to. As it is they are no worse off than before.
Although it is a moderately sizable patch, it ends up with a net
reduction of 377 lines in the size of the kernel source. :)
I have tested this on x86 and ppc with a module that uses __get_user
in an init function, deliberately laid out to get the exception table
out of order, and it works (whereas it oopsed without this patch).
Sanitize 66MHz clock use: "enable" 66MHz clock before starting UDMA3/4/5
read/write transfer and "disable" it after finishing transfer.
- fixes timings for non-UDMA3/4/5 operations (correct 33MHz timings are used)
- allows using UDMA3/4/5 modes on a capable drive even if non-UDMA3/4/5 drive
is present on the same channel
- fixes corner case when one drive on the channel was using UDMA66/100 + LBA48
(so clock was enabled/disabled for each read/write) and other one was using
UDMA66/100 + LBA28, it could happen that request on LBA48 drive disabled
66MHz clock and it was not enabled for the next transfer on LBA28 drive
Ville Nuorvala [Mon, 19 Jan 2004 13:37:58 +0000 (05:37 -0800)]
[IPV6]: Stricter checks on link-locals in bind and sendmsg
When binding to a link-local address, inet6_bind() and raw6_bind() only
check that an interface is specified and that the address exists, but
they don't check if it actually exists on the specified interface.
Similarly, in datagram_sent_ctl() we don't check for the possibility of a
link-local address when we receive the source address from userspace.
Andrew Morton [Mon, 19 Jan 2004 13:16:24 +0000 (05:16 -0800)]
[PATCH] reiserfs v3 should throttle writers
From: Chris Mason <mason@suse.com>
The v3 reiserfs_file_write func doesn't do any write throttling, which
leads to a variety of problems. Here's a patch that makes
reiserfs_file_write call balance_dirty_pages_ratelimited, and exports that
func for module usage.
Andrew Morton [Mon, 19 Jan 2004 13:15:31 +0000 (05:15 -0800)]
[PATCH] ALI M1533 audio hang fix
From: risto.sandvik@helsinki.fi
Everything freezes when trying to play sounds using the alsa driver opl3sa2
(kernel supplied or 1.0.0rc2) on an Acer Extensa series laptop with the Ali
M1533 PCI to ISA bridge. Problem exists both in the 2.6 and 2.4 series of
kernels.
Adding AL_M1533 to drivers/pci/quirks.c fixes the problem for both. This has
been a known problem since 2.2.x (see
http://www.mfn.unipmn.it/~sitta/linux503.html)
Andrew Morton [Mon, 19 Jan 2004 13:15:03 +0000 (05:15 -0800)]
[PATCH] sgiioc4.c cleanup weak symbol and error numbers
From: Jes Sorensen <jes@trained-monkey.org>
The included patch removes the usage of weak symbols from sgiioc4.c now
that we have the Kconfig issue sorted as well as cleans up the error no
handling (instead of return 1 on error) and adds a check for the return
value on snia_pci_endian_set as suggested by Christoph.
Andrew Morton [Mon, 19 Jan 2004 13:14:46 +0000 (05:14 -0800)]
[PATCH] rq_for_each_bio fix
From: Xavier Bestel <xavier.bestel@free.fr>
Within the body of this macro we are accessing rq->bio, but `bio' is an arg
to the macro. If someone uses this macro with some variable which is not
named `bio' it won't compile.
So use a more-likely-to-be-unique identifier for the macro.
Andrew Morton [Mon, 19 Jan 2004 13:14:28 +0000 (05:14 -0800)]
[PATCH] ppc cond_syscall fix
From: Matt Mackall <mpm@selenic.com>
Experimenting with trying to use cond_syscall for a few arch-specific
syscalls, I discovered that it can't actually be used outside the file
in which sys_ni_syscall is declared because the assembler doesn't feel
obliged to output the symbol in that case:
One arch (PPC) is apparently trying to use cond_syscall this way
anyway, though it's probably never been actually tested as the above
test was done on a PPC.
After trying a bunch of tricks to get it to work nicely, I decided
there are basically two alternatives: make weak versions of
sys_ni_syscall wherever they're wanted or put the arch-specific
cond_syscalls in kernel/sys.c where sys_ni_syscall is defined.
The former approach is a bit crufty and doesn't actually do the right
thing in practice as you'll get multiple copies of sys_ni_syscall in
your final image.
The latter introduces some slight arch-pollution in sys.c, but as
arch-specific cond_syscalls aren't all that frequent, it should be
pretty minor. So here's a patch to move the current offender to sys.c:
Andrew Morton [Mon, 19 Jan 2004 13:14:10 +0000 (05:14 -0800)]
[PATCH] fix error case in binfmt_elf.c:load_elf_interp
From: Roland McGrath <roland@redhat.com>
Julie DeWandel noticed that in the error case where elf_map has failed,
load_elf_interp will (at the out_close: label) return the `error' variable,
but that will contain the result of a prior operation and not the error
number from elf_map.
Andrew Morton [Mon, 19 Jan 2004 13:13:14 +0000 (05:13 -0800)]
[PATCH] Arrange for EFI-related code to be compiled away
From: David Mosberger <davidm@napali.hpl.hp.com>
There is some EFI-related code which is present in the ia64 build but is not
needed: variable efi_enabled is always zero.
The patch fiddles with the efi_enabled definition to arrange for
`efi_enabled' to be constant zero or constant one in those situations where
this can be guaranteed.
Andrew Morton [Mon, 19 Jan 2004 13:13:05 +0000 (05:13 -0800)]
[PATCH] ext3: fix determination of inode journalling mode
The test for whether an inode is using journalled, ordered or writeback data
is incorrect and can lead to ext3_set_aops() giving the inode the wrong set
of address_space_operations. Fix. (Spotted by Jan Kara).
Andrew Morton [Mon, 19 Jan 2004 13:12:56 +0000 (05:12 -0800)]
[PATCH] Add bdev private field
From: Christoph Hellwig <hch@lst.de>
Currently xfs has a per-bdev (and XFS filesystem uses up to three underlying
block devices) object that Al complained about loudly that it should be gone.
But for that to happen without rewriting half of XFS (and changing layering
in a way that we don't really want) we need an additional fs-private variable
in struct block_device.
Andrew Morton [Mon, 19 Jan 2004 13:12:47 +0000 (05:12 -0800)]
[PATCH] tmpfs readdir does not update dir atime
From: mark@borgerding.net
Access times of tmpfs dirs do not get updated on readdir. This can cause
empty dirs to get tmpwatch'd too early, b/c atime never changes even though
the dir is in use.
Andrew Morton [Mon, 19 Jan 2004 13:12:38 +0000 (05:12 -0800)]
[PATCH] Fix statically declare FIXMAPs
From: Anton Blanchard <anton@samba.org>, me.
Two uses of the FIXADDR_USER_START/END things are problematic:
a) ppc64 wants the FIXADDR area to be at a different location on 32bit and
64bit tasks. On 32bit we want it just below 4GB but that gets in the way
on 64bit. By putting both right at -(some small amount) we can also use
some ppc tricks to get there real quickly (single instruction branches).
b) We assume that FIXADDR_USER_START and FIXADDR_USER_END are constants.
This breaks the UML build.
Fixes:
- Call it all gate. We currently have half the stuff called fixmap and
the other gate, lets be consistent.
- Create in_gate_area(), get_gate_vma() and use it in both places
- Provide defaults for in_gate_area/get_gate_vma, allowing an arch to
override it. (I used CONFIG_* but am open to better suggestions here)
- The /proc/pid/maps vma wasnt marked readable but the get_user
vma was. That sounds suspicious to me, they are now both the same VMA
and so have the same (read,exec) permissions
Andrew Morton [Mon, 19 Jan 2004 13:12:29 +0000 (05:12 -0800)]
[PATCH] Alpha: make prefetch_spinlock() a no-op on UP
From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
When CONFIG_SMP is not set, spinlock_t is an empty structure, so its
address has arbitrary alignment.
The prefetch instructions with unaligned address don't have visible side
effects on alphas with SRM console (except performance degradation) - the
PALcode handles unaligned traps caused by prefetch instructions internally.
However, on old AlphaBIOS/MILO boxes unaligned prefetch leads to unhandled
alignment trap and kernel panic.
Too many users use the p4-clockmod cpufreq driver instead of the more
advanced speedstep-centrino, speedstep-ich or even acpi drivers. All of
the latter (usually) provide voltage scaling, while the p4-clockmod driver
only offers a variant of frequency scaling. So, warn users if they try out
this driver instead.
Also, instead of using a local copy, use the speedstep_lib infrastructure
for detecting the processor speed. Adding the Pentium-M get_frequency
function to that module only costs about 200 bytes in object size.
The following reversion is what fixes my regression. That puts the
sequential read numbers back to the 2.6.0 values of ~140MB/sec (from the
current 2.6.1 values of 14MB/second)...
We were triggering I/O of the `ahead' when we hit the last page in the
`current' window. That's bad because it gives no pipelining at all.
So go back to full pipelining.
It's not at all clear why this change made a 10x difference in NFS
throughput.
This patch initializes zone->{prev,temp}_priority to DEF_PRIORITY.
Otherwise they are left zeroed, and first run of VM scanner thinks that
zones are under enormous stress.
Andrew Morton [Mon, 19 Jan 2004 13:11:24 +0000 (05:11 -0800)]
[PATCH] bio documentation update
From: Jens Axboe <axboe@suse.de>
Although it was an established part of the current bio api, it was never
documented that bio_add_page() and merge_bvec_fn() must accept to add at
least one page to an empty bio.
Andrew Morton [Mon, 19 Jan 2004 13:10:48 +0000 (05:10 -0800)]
[PATCH] Relocation overflow with modules on Alpha
From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Larger modules fail to load with the message "Relocation overflow vs
section 17", or some other section number.
This failure happens with GPRELHIGH relocation, which is *signed* short,
but relocation overflow check in module.c doesn't take into account the
sign extension.
Andrew Morton [Mon, 19 Jan 2004 13:10:30 +0000 (05:10 -0800)]
[PATCH] Simplify node/zone field in page->flags
From: Matthew Dobson <colpatch@us.ibm.com>
This patch does the following:
1) Rename ZONE_SHIFT to NODEZONE_SHIFT. This value is the number
of bits to shift page->flags to get the node/zone part of the
bitfield.
2) Add a macro called NODEZONE which takes a node number and zone number
and returns a 'nodezone', a bitshifted composition of the two.
3) Create page_zonenum & page_nodenum, inline functions to return the
node/zone a page belongs to with some simple bit twiddling, no
pointer dereferences necessary.
4) Modify page_zone() and set_page_zone() to use the new NODEZONE_SHIFT.
5) Modify memmap_init_zone() & free_area_init_core() to use the new
NODEZONE macros.
6) Fix up some comments to reflect the above changes.
Andrew Morton [Mon, 19 Jan 2004 13:10:11 +0000 (05:10 -0800)]
[PATCH] clarify meaning of bio fields in the end_io function
From: Christophe Saout <christophe@saout.de>
The intent of these are to clarify the meaning of the bio fields in the
bi_end_io function (since we are already mostly there). After these small
modifications bio->bi_idx and the corresponding bio_iovec(bio)->bv_offset
point to the beginning of the completed data, together with the nr_bytes
argument you know exactly what data was finished, e.g. when you can't
track it otherwise (or it would be unnecessary expensive). Apart from that
it's a nice-to-have.
The first mini-patch moves the update of bio_iovec(bio)->bv_offset and
->bv_len after the call of bi_end_io where bi_idx gets updated so they get
updated together. Ok with Jens.
The second part of the patch modifies the multwrite hack in PIO non-
taskfile ide disk code. It modifies the bi_idx field to walk the bios and
doesn't reset it correctly before ending the request. The patch uses the
segment counter in the request field to correctly restore the bi_idx field
before ending the request. Can't possibly break anything since it's
working on the local request copy ("scratchpad") anyway. Also does this in
legacy/pdc4030.c (similar code). The code modified here is going to die
anyway any trying to fix it would be too invasive. Ok with Bartlomiej.
Andrew Morton [Mon, 19 Jan 2004 13:10:03 +0000 (05:10 -0800)]
[PATCH] Optimize proc_pid_lookup
From: Manfred Spraul <manfred@colorfullife.com>
readdir on /proc has two problems: reading all entries is O(N^2), and
entries are overlooked if tasks die in the middle of readdir: the readdir
implementation remembers the offset into the task list, and if a task
(actually: process) that was returned by previous readdir calls exits, then
a random entry is dropped.
The attached patch fixes the O(N^2) by using f_version to store the pid of
the task that should be returned next. This speeds up reading /proc to
O(N). Additionally, it mitigates the effects of dying tasks: Tasks are
skipped only if the task whose pid is stored in f_version exits, all other
task deaths have no effect. Unfortunately the code has a bad worst case
behavior: if the targeted task exits and a new task with the same pid is
created, then all entries in the task list between old and new position are
dropped. This should be rare.
Andrew Morton [Mon, 19 Jan 2004 13:09:46 +0000 (05:09 -0800)]
[PATCH] Remove redundant code in workqueue.c
From: Rusty Russell <rusty@rustcorp.com.au>
It turns out that run_workqueue never has signal_pending(), since setting
the handler to SIG_IGN means "don't make zombies, I'm ignoring them". Fix
the comment, don't allow the signal, and remove the unused waitpid loop.
This also allows simpler conversion of workueues to the kthread mechanism,
which uses signals to indicate it's time to stop.
Andrew Morton [Mon, 19 Jan 2004 13:08:35 +0000 (05:08 -0800)]
[PATCH] Remove Intel check in i386 HPET code
From: Andi Kleen <ak@muc.de>
The i386 HPET time setup code would explicitely check for the Intel vendor
ID. That is bogus because other chipset vendors (like AMD) are
implementing HPET too.
Andrew Morton [Mon, 19 Jan 2004 13:08:26 +0000 (05:08 -0800)]
[PATCH] module removal race fix
From: Rusty Russell <rusty@au1.ibm.com>
Vatsa spotted this: you can remove a module while it's being initialized,
and that will be bad. Hole was opened when I dropped the sem around the
init routine (which can probe for other modules).
Andrew Morton [Mon, 19 Jan 2004 13:06:19 +0000 (05:06 -0800)]
[PATCH] cpu_sibling_map fix
From: "Nakajima, Jun" <jun.nakajima@intel.com>
Restore the HT detection algorithm. Make the processor package mapping
subarch-specific so that it can reflect the APIC ID info provided by BIOS
if required.