Knut Petersen [Fri, 24 Oct 2003 01:30:34 +0000 (18:30 -0700)]
[PATCH] setkeycode ioctl fix
This is a bugfix for setkeycode() in /drivers/char/keyboard.c.
If we change a keycode the corresponding bit should be cleared if and
only if this keycode is not defined any longer. I believe that this
also was intended with the original code, but the implementation is
faulty.
First off all the first three changed lines are obviously erroneus:
oldkey == truekey is false or true, you do not need to inclose this in a
for(). I believe the author intended INPUT_KEYCODE(dev,i) == oldkey.
But fixing this alone is not enough.
If somebody wants to interchange the definition of two keys A and B, the
normal way is to use two setkeycode calls:
setkeycode (scancode A, keycode B);
setkeycode (scancode B, keycode A);
The old code does a clearbit(oldkey ..) call even in situations where
two keys have the same definition, and this situation arises commonly in
the situation mentioned above.
Knut Petersen [Fri, 24 Oct 2003 01:30:26 +0000 (18:30 -0700)]
[PATCH] input / keyboard / Scancode Set 3 support broken
If somebody uses keyboard scancode set 3 it is necessary to explicitly
program the keyboard to send make/break codes for all keys and to set
autorepeat for all keys.
This is critical for some people. One example is the LK461/46W series
of keyboards from Digital Equipment Corporations. These are VMS
keyboards that are also usable on a normal PC.
These keyboards support Scancode Set 2, but for some keys this support
is screwed up -- some function keys (e.g. F18/F20) report the same
scancode sequence combined with both alt and shift keys.
Scancode Set 3 works perfectly if all keys are programmed to give
make/break codes.
A lot of keyboards manufactured by Cherry only make/break for some (not all!)
modifyer keys in scancode set 3 without this fix.
Linus Torvalds [Fri, 24 Oct 2003 00:52:25 +0000 (17:52 -0700)]
Add a quirk for the Intel ICH-[45] to add special ACPI regions.
This fixes resource conflicts due to IO decode that doesn't show
up with a normal PCI probe (we do similar quirks for most other
chipsets). Without it, the kernel doesn't know about some magic
IO decodes for the chips.
David Brownell [Thu, 23 Oct 2003 15:07:41 +0000 (08:07 -0700)]
[PATCH] USB: usb enumeration clears full speed ep0 state
This resolves a bug that was recently reported to me by someone
enumerating a USB 1.1 modem through a high speed hub. I'm a bit
surprised we never saw it before; I think cache/dma timings must
usually be strongly in our favor.
The problem was that the HC was still using the old ep0 maxpacket
value, so when it received an 18 byte device descriptor it would
report a packet overrun and enumeration would fail. The fix is
straightforward: invalidate the HC's old endpoint state when we
change the full speed maxpacket size. (And eventually, we can
remove EHCI and OHCI code coping with usbcore not doing this.)
Stéphane Eranian [Thu, 23 Oct 2003 10:51:51 +0000 (03:51 -0700)]
[PATCH] ia64: fix critical perfmon2 bugs
This patch fixes the following issues:
- fix a nasty corner case by which a task could inherit psr.pp/psr.up
that could be stale by the time it runs. psr.pp/psr.up bits must be
cleared on fork and inherited on execve(). Test case provided by
John Levon.
- mask interrupts when locking the pfm stat structure. We don't want
to take PMU interrupts in the middle of this kind of critical
section.
- fix a bug in pfm_close() for context which use asynchronous
notifications. You cannot call fasync_helper() with interrupts
disabled because it reenables them. There was no real danger of
moving the call outside our critical section.
- fix a bug in in pfm_flush_pmds() where you can leave the freeze bit
set in the pmc saved state.
Arun Sharma [Thu, 23 Oct 2003 10:41:14 +0000 (03:41 -0700)]
[PATCH] ia64: fix broken __emul_prefix
his seems to be broken for ia32 on ia64 and possibly other emulation
architectures as well. The problem comes from
fs/namei.c:set_fs_altroot() using path_lookup() instead of a
path_walk() relative to "/" (which is the case for 2.4).
David Brownell [Thu, 23 Oct 2003 10:28:44 +0000 (03:28 -0700)]
[PATCH] USB: fix usb-storage self-deadlock
This fixes a problem that showed in usb-storage (osdl bugme 1310)
and could have shown in other drivers that used usb_reset_device()
when they already held dev->serialize: a self-deadlock with some
devices.
There are some drivers that should likely change so that they grab
this lock themselves, since they don't call this during probe()
when the lock is already held. The lock protects against config
changes by other tasks, which is currently quite rate.
Alan Stern [Thu, 23 Oct 2003 10:25:37 +0000 (03:25 -0700)]
[PATCH] USB: fix for earlier unusual_devs.h patch
An earlier patch caused trouble because it effectively removed the
US_FL_FIX_INQUIRY flag for devices with release number higher than
0x5009. This one might cause problems because it explicitly goes
against the immediately preceding comment in unusual_devs.h. That
comment says that these Casio digital cameras claim to use the CBI
transport when in fact they only use CB. However, there have been two
reports in the last few weeks from people getting the "unneeded SubClass
and Protocol" log messages. One of them was using a device with release
number 0x1000, right at the start of the range. The other had a device
with release number 0x5010, just beyond the end of the current range.
Maybe Casio is marketing two different devices with different behaviors
but having the same Vendor, Product, and Release values -- I don't know.
Ian Abbott [Thu, 23 Oct 2003 10:17:32 +0000 (03:17 -0700)]
[PATCH] USB: ftdi_sio - Perle UltraPort new ids - 2 of 2
Patch by me (Ian Abbott). Removed aliases of FTDI_VID define for
consistency. Renamed FTDI_PERLE_PID to FTDI_PERLE_ULTRAPORT_PID.
Removed Matrix Orbital and Perle Systems devices from the 8U232AM
device table (but left them in the FT232BM device table) as they
are known to be FT232BM devices.
Ian Abbott [Thu, 23 Oct 2003 10:16:34 +0000 (03:16 -0700)]
[PATCH] USB: ftdi_sio - Perle UltraPort new ids - 1 of 2
Scott Allen's patch to add vid/pid support for Perle Systems
UltraPort USB serial converter, merged up with minor whitespace
changes by myself (Ian Abbott).
David Brownell [Thu, 23 Oct 2003 10:12:01 +0000 (03:12 -0700)]
[PATCH] USB: ACM USB modem fixes
Please merge this patch. I've had two success reports from it.
Putback comment can be:
Fixes some long-standing cdc-acm bugs including:
- Oopsing
- Probe messages not so excessive
- Makes /proc/bus/usb/devices show both interface claims
- Now cdc_acm won't hotplug for Ethernet devices (or RNDIS)
Glen Overby [Thu, 23 Oct 2003 06:19:26 +0000 (01:19 -0500)]
[XFS] xfs_dir2_node_addname_int had reminants of an old block placement
algorithm in it. The old algorithm appeared to look for the first
place to put a new data block, and thus a new freespace block (this is
where the 'foundindex' variable came from). However, new space in a
directory is always added at the lowest file offset as determined by
the extent list. So this stuff is never used.
I completely ripped out the reminants of the old algorithm, and
(again) moved the freespace block add code inside the conditional
where a data block is added.
Mark Haverkamp [Thu, 23 Oct 2003 04:27:44 +0000 (23:27 -0500)]
[PATCH] Work around aacraid FW problem
If you have a 4gig or greater system, some versions of aacraid firmware
have problems if you set HostPhysMemPages >= 0x100000. This can
potentially cause data corruption. If you have 4gig or greater memory,
this patch sets the HostPhysMemPages to something that the firmware can
deal with.
Mike Anderson [Thu, 23 Oct 2003 04:16:59 +0000 (23:16 -0500)]
[PATCH] Add release function to sd for scsi_disk structure
This patch removes the delay in calling device_del on the sdev struct
device during a surprise removal event. Reference counting functions for
sd's scsi_disk structure where also added to fix issues of unregistering
when a sd is open.
I have tested this patch using scsi_debug with differnt combinations of
adds / removes. I mounted both partitioned and un-partitioned sd disks,
remove the host, and then did a umount. The ref count debug output shows
the objects staying in place prior to the umount and cleaning up once
the umount is called.
This patch fixes an issue with a delayed call of device_del on the
sdev_gendev struct device.
- Remove the delayed call to device_del.
- Add kobject to sd scsi_disk structure.
- Add release function for scsi_disk kobject.
- Add get / put functions for scsi_disk and calls to these
functions.
Linus Torvalds [Thu, 23 Oct 2003 01:29:45 +0000 (18:29 -0700)]
Make yenta allocate IO resource windows in same range as in 2.4.x
Apparently some laptops (Compaq EVO N620c for one) have something
hidden at IO port range 0x1000, and the 2.4.x default of allocating
IO starting at 0x4000 is safer.
Ian Wienand [Wed, 22 Oct 2003 14:54:44 +0000 (07:54 -0700)]
[PATCH] ia64: fix gate-data.S build for binutils 2.14
gas will match anything with a prefix
'.data.' as a data special section. Thus to stop unnecessary warning
about changing attributes, we use the .data section standard
attributes aw when creating gate-data.o.
Alex Williamson [Wed, 22 Oct 2003 09:52:04 +0000 (02:52 -0700)]
[PATCH] ia64: trivial ia64 numa/discontig fixes
I stumbled on a couple trivial bugs in ia64 numa/discontig support.
The first just sets the default number of nodes to something reasonable
for a generic kernel, otherwise it's really easy to start walking over
your initdata (more error checking should probably be added). The
second fixes a memcpy to a physical address.
Alexander Viro [Wed, 22 Oct 2003 01:44:21 +0000 (18:44 -0700)]
[PATCH] fix for do_tty_hangup() access of kfreed memory
do_tty_hangup() does fput() on redirect struct file too early -
it could've been the only holder of tty_struct we are working with and in
that case we'll end up freeing it from fput() and then both reading and
modifying kfreed memory.
Andrew Morton [Wed, 22 Oct 2003 01:25:14 +0000 (18:25 -0700)]
[PATCH] early_serial_setup array bounds check
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
early_serial_setup() doesn't validate the array index, so a caller could
corrupt memory after serial8250_ports[] by supplying a value of port->line
that's too large.
I haven't seen a failure related to this, but it seems fragile to rely on
callers to know how many ports the driver supports.
Andrew Morton [Wed, 22 Oct 2003 01:24:18 +0000 (18:24 -0700)]
[PATCH] Add needed __devexit_p's to two gameport drivers
From: "Noah J. Misch" <noah@caltech.edu>
Two gameport drivers need __devexit_p wrapped around their remove
functions. A newer binutils caught this is a link error. This patch fixes
that.
Wrapped a __devexit_p around the 'remove' functions of two gameport
drivers. The lack of __devexit_p was wrong according to linux/init.h,
differed from the practices in nearby files, and caused a link error with
binutils 2.14.90.0.5.
Andrew Morton [Wed, 22 Oct 2003 01:23:51 +0000 (18:23 -0700)]
[PATCH] v850: Workaround for tty-driver init-order problem
From: miles@lsi.nec.co.jp (Miles Bader)
Use `late_initcall' instead of just `__initcall' as a workaround for
the fact that (1) simcons_tty_init can't be called before tty_init,
(2) tty_init is called via `module_init', (3) if statically linked,
module_init == device_init, and (4) there's no ordering of init lists.
We can do this easily because simcons is always statically linked, but
other tty drivers that depend on tty_init and which must use
`module_init' to declare their init routines are likely to be broken.
Andrew Morton [Wed, 22 Oct 2003 01:23:26 +0000 (18:23 -0700)]
[PATCH] io scheduler oops fixes
Peter Osterlund <petero2@telia.com> notes oopses in the anticipatory
scheduler with slab poisoning enabled due to arq->rb_node.rb_right being
uninitialised. So wipe the whole thing when we allocate it.
Andrew Morton [Wed, 22 Oct 2003 01:23:01 +0000 (18:23 -0700)]
[PATCH] Fix oops with CONFIG_MCA=y
With CONFIG_MCA=y and no MCA bus present, drivers go oops deep in the kobject
code when calling mca_register_driver(). Because there is no MCA subsystem
registered against the driver.
Andrew Morton [Wed, 22 Oct 2003 01:22:36 +0000 (18:22 -0700)]
[PATCH] kcapi.c CONFIG_MODULES=n build fix
With CONFIG_MODULES=n this file does not compile because the type of
module->owner is not known.
Gven that card->owner is probably a null pointer when this driver is
statically linked, best thing to do is to just not poke around inside
card->owner at all.
Andrew Morton [Wed, 22 Oct 2003 01:22:11 +0000 (18:22 -0700)]
[PATCH] fix for register_cpu()
From: jbarnes@sgi.com (Jesse Barnes)
The patch adds a symlink from /sys/devices/system/node/nodeM/cpuN to the
/sys/devices/cpu/cpuN directory so that a userspace program can determine
which CPUs belong to which nodes easily. Non-NUMA systems can simply pass
NULL in for the root arg and everything will work like it used to.
Andrew Morton [Wed, 22 Oct 2003 01:22:02 +0000 (18:22 -0700)]
[PATCH] fix low-memory BUG in slab
cache_grow() will call kmem_freepages() if the call to alloc_slabmgmt()
fails. But the pages have not been marked PageSlab at this stage, so
kmem_freepages() goes BUG.
It is more symmetrical to mark the pages as PageSlab in kmem_getpages().
The patch also prunes a bunch of incorrect comments.
(PageSlab doesn't actually do anything: its only value is as a debug check.
I think the LKCD patch uses it).
In fs/binfmt_elf.c:load_elf_binary() (both 2.6 and 2.4), there is some
minimal checking whether the interpreter it's about to load/run is a valid
ELF file, but it fails to check whether the interpreter is of the correct
arch. We ran into this when a borked powerpc64-linux toolchain set the
interpreter on our 64-bit app to our 32-bit ld.so. Executing the app
caused the kernel to really chew up memory. I'm assuming x86_64 and
sparc64 might possibly see the same behavior.
Note I'm not sure of the history behind INTERPRETER_AOUT, so I added the
test for INTERPRETER_ELF so as not to change it's behavior in case someone
still relies on it.
As an aside, it seems the elf_check_arch() macros should really be checking
for more than a valid e_machine value. I'd think checking one or more of
the e_ident[EI_CLASS], e_ident[EI_DATA] and e_ident[EI_OSABI] values would
be required as well, no?
Andrew Morton [Wed, 22 Oct 2003 01:21:14 +0000 (18:21 -0700)]
[PATCH] digi_acceleport.c has bogus "address of" operator
From: "Kurtis D. Rader" <kdrader@us.ibm.com>
http://bugme.osdl.org/show_bug.cgi?id=1365
The digi_acceleport.c USB serial driver has a bogus "address of" operator
that results in BUGs.
The problem is that digi_wakeup_write_lock() takes a pointer to a struct
usb_serial_port. However, what gets passed is a pointer to a pointer to a
struct usb_serial_port.
Andrew Morton [Wed, 22 Oct 2003 01:20:48 +0000 (18:20 -0700)]
[PATCH] Quota deadlock fix
From: Jan Kara <jack@ucw.cz>
attached patch should fix a quota locking problem causing deadlock (when
inode was being released from icache and it caused newly created quota
structure to be written).
Andrew Morton [Wed, 22 Oct 2003 01:20:33 +0000 (18:20 -0700)]
[PATCH] tmpfs 6/7 write i_size_write
From: Hugh Dickins <hugh@veritas.com>
mm/shmem.c was converted to i_size_read in -test1, and the remaining
references to a file's naked i_size are safely protected by i_sem;
but surely shmem_file_write must use i_size_write to update i_size.
Andrew Morton [Wed, 22 Oct 2003 01:20:23 +0000 (18:20 -0700)]
[PATCH] tmpfs 5/7 writepage/truncate race fix
From: Hugh Dickins <hugh@veritas.com>
If it's possible for a tmpfs page beyond i_size to remain in cache until
shmem_truncate repeats truncate_inode_pages, then shmem_writepage's
BUG_ON(index >= info->next_index) cannot be completely safe. But it's a
useful check in a fragile area, so retain it when not in shmem_truncate.
Andrew Morton [Wed, 22 Oct 2003 01:20:16 +0000 (18:20 -0700)]
[PATCH] tmpfs 4/7 getpage/truncate race fix
From: Hugh Dickins <hugh@veritas.com>
Extend use of that SHMEM_PAGEIN flag to where shmem_getpage adds a page
to the cache. It couldn't have caused a BUG_ON(inode->i_blocks), but if
i_size is reduced (from another cpu) the instant after shmem_swp_alloc
checks it, shmem_getpage could insert a page into the cache just after
truncate_inode_pages has passed through cleaning it, leaving stale data
(which may mysteriously reappear if the file is later extended).
Easily fixed for tmpfs, using the mechanism just added for swapoff; and
probably more important there, since its read from swap can insert non-0
data. But is there not a similar issue, a tiny window, in filemap.c?
if truncate_inode_pages comes in between checking i_size and adding new
page to cache. Not worth getting excited, but something to beware of.
Andrew Morton [Wed, 22 Oct 2003 01:20:07 +0000 (18:20 -0700)]
[PATCH] tmpfs 3/7 swapoff/truncate race fix
From: Hugh Dickins <hugh@veritas.com>
On 23 July, Sergey S. Kostyliov <rathamahata@php4.ru> reported a tmpfs
BUG_ON(inode->i_blocks) during swapoff: my last version of the fix to
swapoff/truncate race was inadequate, since I_FREEING might get set or
i_size be reduced (from another cpu) the instant after it's tested here.
So revert to the previous version of the fix, shmem_truncate calling
truncate_inode_pages again, if pages still left in cache; but avoid the
recall in usual cases of partial truncation, by having a "pagein" flag
to indicate when recall might be necessary. (Since those flags already
use VM_ACCOUNT and VM_LOCKED, must redefine another VM_flag for this.)
Sergey and 2.4-aa have run fine with this for a couple of months.
Andrew Morton [Wed, 22 Oct 2003 01:19:49 +0000 (18:19 -0700)]
[PATCH] tmpfs 1/7 LTP ENAMETOOLONG fix
From: Hugh Dickins <hugh@veritas.com>
LTP tests the filesystem on /tmp: there are many failures when using tmpfs
because simple_lookup forgot to reject filenames longer than the NAME_MAX
tmpfs declares in its statfs. This also fixes ramfs and hugetlbfs.
Andrew Morton [Wed, 22 Oct 2003 01:19:41 +0000 (18:19 -0700)]
[PATCH] atp870u oops fix
This driver is taking uinitialised stack gunk from the pdev[] array and
feeding it into pci_read_config_byte() and crashing when modprobed with no
hardware present.
Fix it to not index past the initialised members of pdev[].
Andrew Morton [Wed, 22 Oct 2003 01:19:33 +0000 (18:19 -0700)]
[PATCH] Time precision, adjtime(x) vs. gettimeofday
From: Stephen Hemminger <shemminger@osdl.org>
The following will prevent adjtime from causing time regression. It delays
starting the adjtime mechanism for one tick, and keeps gettimeofday inside
the window.
Only fixes i386, but changes to other arch would be similar.
Running a simple clock test program and playing with adjtime demonstrates
that this fixes the problem (and 2.6.0-test6 is broken). But given the
fragile nature of the timer code, it should go through some more testing
before inclusion.
The mem= fixes from Red Hat's tree had a small bug:
if mem= was not actually used with the additional features, but
int plain old way, is used the value as the size of memory it
wants, not the upper limit. The problem with this is that there
is a small difference due to memory holes.
I had one report of a person using mem= to reduce memory size for
a broken i386 chipset thaty only supports 64MB cached and the rest
as mtd/slram device for swap. I got broken as the boundaries changed.
Andrew Morton [Wed, 22 Oct 2003 01:19:08 +0000 (18:19 -0700)]
[PATCH] scsi: handle zero-length requests
From: Jens Axboe <axboe@suse.de>
The command 'eject /dev/scd0' sends a START_STOP command to the device with
the data direction set to SCSI_DATA_WRITE but a transfer length of zero.
This causes a problem for some code paths.
Andrew Morton [Wed, 22 Oct 2003 01:18:59 +0000 (18:18 -0700)]
[PATCH] fix split_vma vs. invalidate_mmap_range_list race
From: "V. Rajesh" <vrajesh@eecs.umich.edu>
If a vma is already present in an i_mmap list of a mapping,
then it is racy to update the vm_start, vm_end, and vm_pgoff
members of the vma without holding the mapping's i_shared_sem.
This is because the updates can race with invalidate_mmap_range_list.
I audited all the places that assign vm_start, vm_end, and vm_pgoff.
AFAIK, the following is the list of questionable places:
1) This patch fixes the racy split_vma. Kernel 2.4 does the
right thing, but the following changesets introduced a race.
David S. Miller [Tue, 21 Oct 2003 20:54:53 +0000 (13:54 -0700)]
[NET COMPAT]: Fix hangs caused by bugs in do_netfilter_replace().
It is illegal to try to access things via userspace pointers
after set_fs(KERNEL_DS), and that is exactly what this function
was doing. Fix by using compat_alloc_user_user_space(), this
preserves the copy minimization the original code had.
James Cleverdon [Tue, 21 Oct 2003 14:27:58 +0000 (07:27 -0700)]
[PATCH] Allow more APIC irq sources
The "irq_vector[]" array is indexed by the sum of all RTEs in all I/O
APICs, and is not necessarily limited by the x86 CPU irq vector inputs.
In fact, the irq vector index would overflow on big machines with lots
of IO APIC's, causing the boot to fail.
So grow the array for the big SMP boxes, keeping the default the same as
before (and shrink the vector entry size down to a 8-bit value, since
that's the size of the actual CPU vector entry).