Andrew Morton [Mon, 29 Dec 2003 13:44:34 +0000 (05:44 -0800)]
[PATCH] vmscan: reset refill_counter after refilling the inactive list
zone->refill_counter is only there to provide decent levels of work batching:
don't call refill_inactive_zone() just for a couple of pages.
But the logic in there allows it to build up to huge values and it can
overflow (go negative) which will disable refilling altogether until it wraps
positive again.
Just reset it to zero whenever we decide to do some refilling.
Andrew Morton [Mon, 29 Dec 2003 13:44:25 +0000 (05:44 -0800)]
[PATCH] serial console registration bugfix
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
uart_set_options() can dereference a null pointer. This happens if you
specify a console that hasn't previously been setup by early_serial_setup().
For example, on ia64, the HCDP typically tells us about line 0, so we calls
early_serial_setup() for it. If the user specifies "console=ttyS3", we
machine-check when trying to follow the uninitialized port->ops pointer.
It's not entirely clear to me whether we should return 0 or -ENODEV or
something. The advantage of returning zero is that if the user specifies
"console=ttyS0" and we just lack the HCDP, the console doesn't work as early
as usual, but it does start working after the serial driver detects the port
(though the baud/parity/etc from the command line are lost). Returning
-ENODEV seems to prevent it from ever working.
Andrew Morton [Mon, 29 Dec 2003 13:44:10 +0000 (05:44 -0800)]
[PATCH] Add `gcc -Os' config option
From: Adrian Bunk <bunk@fs.tum.de>
Allow the kernel to be built with `-Os'.
It requires CONFIG_EMBEDDED. This is to make it "hard to get at" because
one gcc version (3.2.x I think) from RH9 generates crashy kernels with this
option set.
Andrew Morton [Mon, 29 Dec 2003 13:44:02 +0000 (05:44 -0800)]
[PATCH] Fix proc_pid_lookup vs exit race
From: Manfred Spraul <manfred@colorfullife.com>
Fixes a race between proc_pid_lookup and sys_exit.
- The inodes and dentries for /proc/<pid>/whatever are cached in the dentry
cache. d_revalidate is used to protect against stale data: d_revalidate
returns invalid if the task exited.
Additionally, sys_exit flushes the dentries for the task that died -
otherwise the dentries would stay around until they arrive at the end of
the LRU, which could take some time. But there is one race:
- proc_pid_lookup finds a task and prepares new dentries for it. It must
drop all locks for that operation.
- the process exits, and the /proc/ dentries are flushed. Nothing
happens, because they are not yet in the hash tables.
- proc_pid_lookup adds the task to the dentry cache.
Result: dentry of a dead task in the hash tables.
The patch fixes that problem by flushing again if proc_pid_lookup notices
that the thread exited while it created the dentry. The patch should go
in, but it's not critical.
- task->proc_dentry must be the dentry of /proc/<pid>. That way sys_exit
can flush the whole subtree at exit time. proc_task_lookup is a direct
copy of proc_pid_lookup and handles /proc/<>/task/<pid>. It contains the
lines that set task->proc_dentry. This is bogus, and must be removed.
This hunk is much more critical, because creates a de-facto dentry leak
(they are recovered after flushing real dentries from the cache).
Andrew Morton [Mon, 29 Dec 2003 13:43:54 +0000 (05:43 -0800)]
[PATCH] Fix init_i82365 sysfs ordering oops
From: Russell King <rmk@arm.linux.org.uk>
This oops has been caused by the need to register the class before
registering any objects against it. Unfortunately, the class needs
to be registered asynchronously in a separate thread to avoid driver
model deadlock with yenta with cardbus cards inserted or standard
PCMCIA cards not being detected correctly due to a race.
I think the only real solution is to remove the class_device_create_file
calls from all socket drivers. This is just a simple commenting out of
the calls, and should be suitable for the remainder of the -test kernels.
Due to the number of cases that we're encountering with PCMCIA, I'm
beginning to wonder if the driver model could be fixed to be more kind
to PCMCIA by avoiding some of these ordering dependencies. None of this
would be a problem if the driver model would allow PCI device drivers to
register PCI devices while their probe or remove functions were executing.
Andrew Morton [Mon, 29 Dec 2003 13:43:38 +0000 (05:43 -0800)]
[PATCH] Fix dcache and icache bloat with deep directories
This fixes the recently-reported "fsstress memory leak" problem. It has been
there since November 2002.
shrink_dcache() has a heuristic to prevent the dcache (and hence icache) from
getting shrunk too far: it refuses to allow the dcache to shrink below
2*nr_used.
Problem is, _all_ non-leaf dentries (directories) count as used. So when you
have really deep directory hierarchies (fsstress creates these), nr_used is
really high, and there is no upper bound to the amount of pinned dcache.
The patch just rips out the heuristic. This means that dcache (and hence
icache (and hence pagecache)) will be shrunk more aggressively. This could
be a problem, and tons of testing is needed - a new heuristic may be needed.
However I am not able to reproduce the problem which cause me to add this
heuristic in the first place:
Simple testcase: run a huge `dd' while running a concurrent `watch -n1
cat /proc/meminfo'. The program text for `cat' gets loaded from disk once
per second.
Andrew Morton [Mon, 29 Dec 2003 13:43:08 +0000 (05:43 -0800)]
[PATCH] Use __GFP_REPEAT for cdrom buffer
The cdrom driver does an order-4 allocation and the open will fail if that
allocation does not succeed. This happened to me on an unstressed 900MB
machine.
So add the __GFP_REPEAT flag in there - this will cause the page allocator to
keep on freeing pages until the allocation succeeds.
It can in theory livelock but in practice I expect it is OK: the user should
just stop running dbench or whatever it is which is gobbling all the memory
and the mount/open will then succeed.
Andrew Morton [Mon, 29 Dec 2003 13:42:58 +0000 (05:42 -0800)]
[PATCH] scale the initial value of min_free_kbytes
This tunable refers to the amount of free memory which the VM will attempt to
sustain. It is mainly needed for atomic allocations (eg, networking
receive).
It is currently hardwired to 1024k, which is far too large for small machines
and too small for large machines.
Rework it to be 128k on tiny machines and 16M on huge machines.
Andrew Morton [Mon, 29 Dec 2003 13:42:34 +0000 (05:42 -0800)]
[PATCH] EFI support for ia32
From: Matt Tolentino <metolent@snoqualmie.dp.intel.com>
Attached is a patch that enables EFI boot-up support in ia32 kernels.
In order to continue to determine whether the kernel should initialize using
EFI tables, I've temporarily added a check on the LOADER_TYPE boot parameter.
Although I haven't requested that elilo be assigned an id for this yet, I've
used this to determine whether the kernel should use the EFI initialization
path as well as a check to see if the EFI_SYSTAB boot parameter contains
anything. If someone has a better suggestion for determining this, I'm
open...
This patch also uses the existing ioremapping functions to map the efi tables
into kernel virtual address space. I've added an option such that I could
use Dave Hansen's boot_ioremap() before paging_init(). After paging_init, I
then remap the efi memmap using bt_ioremap for use later. This has
eliminated the need for several functions...thanks for the suggestions and
thanks for your help Dave. Still this could use a look-see.
Andrew Morton [Mon, 29 Dec 2003 13:42:07 +0000 (05:42 -0800)]
[PATCH] make /proc/tty/driver/ S_IRUSR | S_IXUSR for root only
From: Chris Wright <chrisw@osdl.org>
Fix for CAN-2003-0461: /proc/tty/driver/serial in Linux 2.4.x reveals the
exact number of characters used in serial links, which could allow local
users to obtain potentially sensitive information such as the length of
passwords.
Andrew Morton [Mon, 29 Dec 2003 13:42:00 +0000 (05:42 -0800)]
[PATCH] fix suid leak in /proc
From: Chris Wright <chrisw@osdl.org>
Fix for CAN-2003-0501: The /proc filesystem in Linux allows local users to
obtain sensitive information by opening various entries in /proc/self
before executing a setuid program, which causes the program to fail to
change the ownership and permissions of those entries.
Andrew Morton [Mon, 29 Dec 2003 13:41:51 +0000 (05:41 -0800)]
[PATCH] fix unsigned issue with env_end - env_start
From: Chris Wright <chrisw@osdl.org>
Fix for CAN-2003-0462: A race condition in the way env_start and
env_end pointers are initialized in the execve system call and used in
fs/proc/base.c on Linux 2.4 allows local users to cause a denial of
service (crash).
Pete Zaitcev [Mon, 29 Dec 2003 05:16:58 +0000 (21:16 -0800)]
[SPARC]: Get sun4c functional again in 2.6.0
Move some elements of task_struct into thread_info so that
these elements are locked into the TLB in the trap handlers
and thus will not cause a watchdog reset.
Arnaud Quette [Mon, 29 Dec 2003 04:31:36 +0000 (20:31 -0800)]
[PATCH] USB: disable hiddev support for MGE UPS
following my recent posts on libusb-devel and hidups, here's
a patch to disable hiddev support for MGE UPSs. It only
declares VID/PID as QUIRK_IGNORE in hid-core's blacklist.
This simply prevent hiddev to be loaded when plugging
an MGE UPS.
David Brownell [Mon, 29 Dec 2003 04:30:55 +0000 (20:30 -0800)]
[PATCH] USB: let USB_{PEGASUS,USBNET} depend on NET_ETHERNET
Adrian Bunk wrote:
> I observed the following small problem in 2.6:
>
> - MII depends on NET_ETHERNET
> - USB_PEGASUS and USB_USBNET select MII, but they depend only on NET
>
> The patch below lets USB_PEGASUS and USB_USBNET depend on NET_ETHERNET
> instead of NET to fix this issue.
Actually how about this one instead? The PEGASUS bit is the same.
The difference is that MII (and CRC32) are only attributed to the
driver code that needs those ... AX8817X needs both, ZAURUS just
needs CRC32. The core (which should eventually become a separate
module) shouldn't depend on those modules at all.
Also both CDCETHER and AX8817X are marked as non-experimental;
I recall Dave Hollis submitted a patch to do that for AX8817X,
and CDCETHER now seems to have gotten enough success reports too.
David Brownell [Mon, 29 Dec 2003 04:29:03 +0000 (20:29 -0800)]
[PATCH] USB: <linux/usb_gadget.h> doc updates
As more people have been using this API, the need for some
clarifications has (no surprise!) came up.
Most significant is the halt processing, needed to make
Alan's "File Storage Gadget" (mass storage class, talks
to usb-storage and Windows) handle fault cases cleanly.
Gadget drivers can't halt IN endpoints until the FIFO is
emptied by the host ... virtually no hardware tries to
sequence the DATA and STALL packets by itself.
Adam Kropelin [Mon, 29 Dec 2003 04:21:02 +0000 (20:21 -0800)]
[PATCH] USB: Stop hiddev generating empty events
hiddev is mistakenly returning empty hiddev_event structures for report
events. According to Documentation/usb/hiddev.txt, report events are
only sent when HIDDEV_FLAG_REPORT and HIDDEV_FLAG_UREF are both set.
Currently, report events from hid cause hiddev to generate empty
hiddev_event events when HIDDEV_FLAG_UREF is not set.
Wim Van Sebroeck [Mon, 29 Dec 2003 04:13:21 +0000 (20:13 -0800)]
[PATCH] Watchdog update
Kconfig:
Reflect new watchdog Documentation directory.
[USB] hid blacklist addition:
Add the Berkshire Products USB PC Watchdog to the hid blacklist.
This to avoid problems with USB-Disconnects when the card feels it
should reboot...
Ingo Molnar [Mon, 29 Dec 2003 02:23:53 +0000 (18:23 -0800)]
[PATCH] Fix context switch accounting
Noted by Nick Piggin, fix based on a patch by Linus.
I've done some additional cleanups: fixed a compilation warning on UP
and cleaned up the goto pick_next_task code. Moved the 'unlikely' to
the test as a whole.
I've tested this patch and the context-switch stats look OK.
vidc_mksound causes the kernel to crash badly when executed. As it does not do anything useful I did not take the time to find out why, but removed it.
The vidc does have an external reference clock that is used to generate 44100/20050/10025kHz sample rates. The code is changed in a way that it uses that reference clock that can better approximate the desired clock.
If we can approximate the desired rate to more than 1/256 accuracy, we return the desired rate instead of the real rate. This is to assist using some programs that for instance believe they need exacly 8kHz which we can not have, but we can have 8.018kHz which is pretty close so that nobody would notice the difference.
Russell King [Sun, 21 Dec 2003 19:51:30 +0000 (19:51 +0000)]
[ARM] Ensure that /proc/uptime returns sensible figures.
When we set xtime at boot from the RTC, we weren't setting the
monotonic time offset. This had the effect of making the uptime
rather large.
We get around this problem by using the do_settimeofday() to set
the current time. do_settimeofday() knows about this issue, and
will apply the appropriate correction to the monotonic time offset
for us.
Bill Marr [Fri, 19 Dec 2003 03:11:27 +0000 (19:11 -0800)]
[PATCH] Status Query On My MCT-U232 Patch
Brief Patch Description:
Fix a problem in the 'mct_u232' driver whereby output data gets held up in the
USB/RS-232 adapter for RS-232 devices which don't assert the 'CTS' signal.
Background:
The Belkin F5U109 is a 9-pin USB/RS-232 adapter that is supported by the
existing 'mct_u232' kernel module. Recently, I've been testing it under the
2.4.22 (Slackware 9.1) kernel and the 2.6.0-test9 kernel.
I've connected a Garmin 'GPS35 TracPak' GPS receiver (RS-232 interface) and an
ordinary RS-232 external modem to my PC's USB port via the Belkin F5U109
adapter.
Problem:
Although _reads_ from either of the RS-232 devices mentioned above work fine
via the Belkin adapter, _writes_ to the GPS receiver are not being seen by
the GPS. Writes to the modem, however, work perfectly.
Aside: The 'Linux USB Users' archives show that at least one other person
(circa May 2002) had the exact same problem I'm having, but it sounds like no
solution was ever determined because the person in question just bought a
different USB/RS-232 adapter.
Investigation:
Using the 'seyon' terminal emulator in Linux and a crude hardware RS-232
"breakout box" that I hacked together, I've determined that the problem is
related to the RTS/CTS RS-232 hardware handshaking.
After further investigation, I've concluded that RS-232 devices which do not
assert the 'Clear To Send' ('CTS') signal prevent the Belkin F5U109 adapter
from transmitting data to the RS-232 device when the current (version 1.1)
'mct_u232' module is used. The data gets "queued up" (up to a point -- 16
bytes, I think) in the adapter but never transmitted.
Since this GPS receiver works perfectly (reads and writes) when connected to a
PC running W98se using the same Belkin adapter and the Belkin-supplied
Windows driver, the Linux driver became suspect.
After some testing with SniffUSB, I found that the Windows driver sends a
couple of unique undocumented USB 'device requests' that the Linux driver
does not. As it turns out, the second of those 2 requests is critical in
making the adapter transmit data to a device which doesn't assert 'CTS'.
For completeness, the Windows driver in use was determined from the 'Device
Manager', 'Driver File Details' page:
U2SPORT.VXD
Provider: Magic Control Technology
File version: 1.21P.0104 for Win98/Me
Solution:
My patch adds the 2 missing USB 'device request' commands right after a
baud-change command. This mimics the operation of the W98 driver.
Unfortunately, after much testing, I found no other operation (besides a
baud-change request) under Windows that triggers either of these 2 'device
request' commands. This makes it impossible to fully document the behavior of
these requests, but I've made entries for them alongside the others in the
'mct_u232.h' file.
Purely for clarity, the patch also modifies various comments in 'mct_u232.h',
mostly to reflect proper sizes of the various 'USB Device Request' fields per
the USB 1.1 specification.
The patch also updates the version number of the driver, corrects a minor
typographical error, and documents a difference in the length of the data in
a 'baud rate change' command for certain adapters which use a coded baud-rate
rather than the conventional RS-232 baud rate divisor.
I've provided (tested) patches for both the 2.4.22 and the 2.6.0-test9
kernels.
Please note that the changes to 'mct_u232.h' apply to both 2.4.22 and
2.6.0-test9 since that file has not changed between those kernel releases.
Nevertheless, I've included that (same) portion of the patch in both
attachments for simplicity.
Dmitry Torokhov [Thu, 18 Dec 2003 13:35:52 +0000 (05:35 -0800)]
[PATCH] Input: remove synaptics config option
Remove Synaptics config option. Since mousedev was fixed with regard to
touchpads generating absolute events there should no troubles for users
migrating from older kernel or different hardware so we can have it always
compiled in.
Dmitry Torokhov [Thu, 18 Dec 2003 13:35:36 +0000 (05:35 -0800)]
[PATCH] Input: add serio_[un]register_port_delayed to fix deadlock
Add serio_[un]register_port_delayed to allow delayed execution of
register/unregister code (via kseriod) when it is not clear whether
serio_sem has been taken or not. Use in i8042.c to avoid deadlock
Dmitry Torokhov [Thu, 18 Dec 2003 13:35:20 +0000 (05:35 -0800)]
[PATCH] Input: psmouse fixes
- Remove psmouse_pm_callback since i8042 now has its own resume
handler which will issue reconnect request
- Do not close/open serio port in psmouse_reconnect since i8042
should restore ports to the proper state before calling reconnect
Dmitry Torokhov [Thu, 18 Dec 2003 13:34:47 +0000 (05:34 -0800)]
[PATCH] Input: implement resume methods
- Implement resume methods using serio_reconnect facility
- Register i8042 with sysfs
- Register i8042 with older PM scheme to restore keyboard
and mouse for APM users
- Convert parameter handling to the new style
- Unregister port not only when there is no free IRQ but
also if the port fails to activate.
Dmitry Torokhov [Thu, 18 Dec 2003 13:34:30 +0000 (05:34 -0800)]
[PATCH] Input: add psmouse_proto parameter
New parameter psmouse_proto to replace psmouse_noext. Allows to specify
highest PS/2 protocol extension that kernel has permission to negotiate
(bare|imps|exps). psmouse_noext marked as deprecated and emits a warning
when used. parameter parsing converted to the new scheme.
Vojtech Pavlik [Thu, 18 Dec 2003 13:33:58 +0000 (05:33 -0800)]
[PATCH] Fixes for keyboard 2.4 compatibility
I have two patches I'd like to get tested by a wider audience before
sending them to Linus for the 2.6 tree.
The first one fixes an issue in current 2.6-test with AT keyboard repeat
rate setting, the second one makes setkeycodes/getkeycodes work the same
as 2.4, so that people can keep their setups. It also fixes japanese and
korean key handling.
I just want to share a little change that I've did to psmouse_pm_callback()
which without this, my synaptics touchpad would prevent my laptop (IBM
Thinkpad T30) from suspending.
Dmitry Torokhov [Thu, 18 Dec 2003 13:33:25 +0000 (05:33 -0800)]
[PATCH] Input: unregister i8042 port when writing to control register fails
I think that if we can't write to the control register it's not less critical
than not having a free IRQ so we better unregister port in this case as well.
Peter Osterlund [Thu, 18 Dec 2003 13:33:09 +0000 (05:33 -0800)]
[PATCH] synaptics powerpro fix
Made the packet checking code less strict, so that the driver works also for
touchpads that don't strictly follow the synaptics absolute protocol.
Problem reported by Anders Kaseorg using a PowerPro C 3:16 laptop.
Dmitry Torokhov [Thu, 18 Dec 2003 13:32:52 +0000 (05:32 -0800)]
[PATCH] Synaptics: use serio_reconnect
Input/Synaptics:
1. Support for pass-through port moved from Synaptics driver to psmouse
itself, it is cleaner and should allow using it in other drivers if
needed.
2. The driver makes use of new reconnect functionality in serio. It will
try to keep the same input device after resume or when it resets itself.
3. If mouse is disconnected or other mouse plugged in while sleeping the
driver should correctly recognize that and create a new serio/input
device.
Dmitry Torokhov [Thu, 18 Dec 2003 13:32:03 +0000 (05:32 -0800)]
[PATCH] Add black list to handler<->device matching
Input: Introduce an optional blacklist field in input_handler structure.
When loading a new device or a new handler try to match device
against handler's black list before doing match on required
attributes.
This allows to get rid of "surprises" in connect functions, IMO
connect should only fail when it physically can not connect, not
because it decides it does not like device.
Dmitry Torokhov [Thu, 18 Dec 2003 13:31:47 +0000 (05:31 -0800)]
[PATCH] serio: possible race between port removal and kseriod
Input: There is a possibility that serio might get deleted while there
are outstanding events involving that serio waiting for kseriod
to process them. Invalidate them so kseriod thread will just
drop dead events.
Jeff Garzik [Wed, 17 Dec 2003 12:35:44 +0000 (07:35 -0500)]
[libata promise] fix another ugly bug
For the SX4, only one Host DMA (local DIMM) engine is on the hardware,
while there is an ATA engine for each SATA port. This means that
Host DMA transactions must be queued. When previously fixing this problem
(the driver had previously assumed an HDMA engine per port), I stored
the HDMA packet queue in a per-port data structure.
This was incorrect: this patch changes it to correctly use a
per-host data structure, not a per-port structure.
Jes Sorensen [Wed, 17 Dec 2003 00:26:43 +0000 (16:26 -0800)]
[PATCH] qla1280 crash fix in error handling
This fixes a bug in the qla1280 driver where it would leave a pointer to
an on the stack completion event in a command structure if
qla1280_mailbox_command fails. The result is that the interrupt handler
later tries to complete() garbage on the stack. The mailbox command can
fail if a device on the bus decides to lock up etc.
Jens Axboe [Wed, 17 Dec 2003 00:12:29 +0000 (16:12 -0800)]
[PATCH] CDROM_SEND_PACKET bug
I just found Yet Another Bug in scsi_ioctl - CDROM_SEND_PACKET puts a
kernel pointer in hdr->cmdp, where sg_io() expects to find user address.
This worked up until recently because of the memcpy bug, but now it
doesn't because we do the proper copy_from_user().
This fix undoes the user copy code from sg_io, and instead makes the
SG_IO ioctl copy it locally. This makes SG_IO and CDROM_SEND_PACKET
agree on the calling convention, and everybody is happy.
I've tested that both
cdrecord -dev=/dev/hdc -inq
and
cdrecord -dev=ATAPI:/dev/hdc -inq
works now. The former will use SG_IO, the latter CDROM_SEND_PACKET (and
incidentally would work in both 2.4 and 2.6, if it wasn't for
CDROM_SEND_PACKET sucking badly in 2.4).
Jens Axboe [Mon, 15 Dec 2003 23:51:55 +0000 (15:51 -0800)]
[PATCH] Fix IDE bus reset and DMA disable when reading blank DVD-R
From Jon Burgess:
There is a problems with blank DVD media using the ide-cd driver.
When we attempt to read the blank disk, the drive responds to the read
request by returning a "blank media" error. The kernel doesn't have
any special case handling for this sense value and retries the request
a couple of times, then gives up and does a bus reset and disables DMA
to the device.
Which obviously doesn't help the situation.
The sense key value of 8 isn't listed in ide-cd.h, but it is listed in
scsi.h as a "BLANK_CHECK" error.
This trivial patch treats this error condition as a reason to abort
the request. This behaviour is the same as what we do with a blank CD-R.
It looks like the same fix might be desired for 2.4 as well, although
is perhaps not so important since scsi-ide is normally used instead.