Russell King [Fri, 26 Jul 2002 21:58:27 +0000 (22:58 +0100)]
[PATCH] designated initalizers for serial/
The old form of designated initializers are obsolete: we need to
replace them with the ISO C forms before 2.6. Gcc has always
supported both forms anyway.
Russell King [Fri, 26 Jul 2002 11:48:36 +0000 (12:48 +0100)]
[SERIAL] Stop open() looping while opening a non-present port
Trying to open a non-present port (for configuration) causes us to
to endlessly loop (by returning -ERESTARTSYS). We should be returning
success. This cset fixes this.
Rusty Russell [Fri, 26 Jul 2002 08:28:20 +0000 (01:28 -0700)]
[PATCH] Hot-plug CPU Boot Rewrite for i386
This modifies the i386 boot sequence to "plug in" CPUs one at a
time. This is the minimal change to make it work (the CPUs are
brought up as normal during the "smp_prepare_cpus()" probe phase).
Rusty Russell [Fri, 26 Jul 2002 08:28:07 +0000 (01:28 -0700)]
[PATCH] Hot-plug CPU Boot Changes
This patch alters the boot sequence to "plug in" each CPU, one at a
time. You need the patch for each architecture, as well. The
interface used to be "smp_boot_cpus()", "smp_commence()", and each
arch implemented the "maxcpus" boot arg itself. With this patch,
it is:
smp_prepare_cpus(maxcpus): probe for cpus and set up cpu_possible(cpu).
__cpu_up(cpu): called *after* initcalls, for each cpu where
cpu_possible(cpu) is true.
smp_cpus_done(maxcpus): called after every cpu has been brought up
Martin Dalecki [Fri, 26 Jul 2002 08:16:19 +0000 (01:16 -0700)]
[PATCH] IDE 105
- Rename ata-timings.h to timings.h. Same arguments as for agp.
- Always include hdparm.h just before ide.h. Include them last where
used. This is preparing to split out the IDE register declarations
out of this file, since many other files in the kernel include it,
which don't have anything to do with IDE.
- Don't use the "IDE special" data type "byte". Just use the u8 data
type for consistency with the rest of the kernel where applicable.
Martin Dalecki [Fri, 26 Jul 2002 08:14:58 +0000 (01:14 -0700)]
[PATCH] IDE 104
- Make the bit-sliced data types in hdreg.h use the bit-slice data types
instead of the generic ones. This makes clear that those are supposed
to be register masks.
Martin Dalecki [Fri, 26 Jul 2002 08:14:19 +0000 (01:14 -0700)]
[PATCH] 2.5.28 small REQ_SPECIAL abstraction
The attached patch does the following:
1. Remove blkdev_release_request(Request); it was an unnecessary wrapper
around blk_put_request(Request). Likely some leftover from pre-BIO
time...
2. Abstract out the fine __scsi_insert_special() function out from
the SCSI code.
Now that I have finally managed to kill all those IDE 'specific'
REQ_BLAH request types, we can do this final step, and it will be
used soon at least by ATA code as well. The goal is that
scsi_request_fn and do_ide_request should start to look similar
like silblings.
Its called blk_insert_request() now and even documented in code.
3. Change some stuff over from extern inline to static inline in
blkdev.h. (trivia...)
This patch doesn't change *any* functionality, so its not exposing
SCSI to any danger :-).
Add full support for the NFSv3 permissions checking. Ensures that we
work properly with NFSv3 servers that do uid/gid mapping and/or have
support for ACLs.
Permissions are cached in the struct nfs_inode in order to reduce the
number of RPC calls. The cache timeout period is given by the ordinary
attribute timeout.
[PATCH] Reduce the number of getattr/lookup calls in nfs_lookup_revalidate()
Reduce the number of getattr/lookup calls in nfs_lookup_revalidate()
by making the latter rely on the ordinary attribute cache, and moving
the close-to-open data consistency checking into nfs_open().
This does mean that we can end up calling GETATTR twice: once in
nfs_lookup_revalidate() then immediately after in nfs_open(), however
it also means that sys_stat() and friends now use cached attributes.
Make RPC over UDP use a socket buffer size that is large enough to fit
all the messages. Congestion control is in any case handled by the Van
Jacobson algoritm, and we need to work around a bug in
ip_build_xmit_slow() w.r.t. fragmentation when there is insufficient
buffer memory to fit the entire message.
* handle another cardbus unplug misbehavior
- root hub kept polling, never stopped
- starts to update hcd->state to match internal state
* code to count/queue TDs for interrupt/bulk is now shared
- removes (low level) interrupt transfer size limitation
- both types already handled urb queueing
- re-indents some TD queuing code (most of patch, by volume)
* cleanup
- use new container_of() macro, not list_entry()
- report a previously unreported error (control data >4K)
- simplify intr/bulk toggle reset
- tweak TD debug dump
- more object code shrinkage (often fits in 3 pages)
Note that the control data size error is just a long-standing
limitation of this driver, not a USB limitation! It could be
fixed, if anyone starts to run into it.
Symbols CONFIG_USB_STORAGE_DATAFAB, CONFIG_USB_STORAGE_HP8200e,
CONFIG_USB_STORAGE_SDDR09, CONFIG_USB_STORAGE_SDDR55, and
CONFIG_USB_STORAGE_JUMPSHOT depend on CONFIG_EXPERIMENTAL but
do not say so in their banners.
Johann Deneux [Fri, 26 Jul 2002 03:42:24 +0000 (20:42 -0700)]
[PATCH] Merged hid-lgff.c and hid-lg3d.c
Here is a patch wich moves hid-lg3d.c into hid-lgff.c. This allows to
share the init code.
A side-effect of this merge is that rumble pads are now handled the same
way joysticks are. Instead of having one timer per effect, executing
only when needed, we have one timer executing at regular intervals going
over each effect.
Russell King [Fri, 26 Jul 2002 02:11:09 +0000 (03:11 +0100)]
[SERIAL] Fix buglet causing (eg) ttyS-14
Allocate positive instead of negative line numbers when 8250.c
registers a new port with the core. This bug could cause
registrations to erroneously fail, or oopsen when the pcmcia
serial device is ejected.
Add irq_enter/exit to smp_call_function_interrupt():
arch/i386/kernel/microcode.c:do_microcode_update() calls
smp_call_function(do_update_one). do_update_one() does
spin_lock/unlock.
Remove unneeded GET_THREAD_INFO(%ebx) in device_not_available() trap in
entry.S
Merge penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/tls-tree
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
what is TLS? Thread Local Storage is a concept used by threading
abstractions - fast an efficient way to store per-thread local (but not
on-stack local) data. The __thread extension is already supported by gcc.
proper TLS support in compilers (and glibc/pthreads) is a bit problematic
on the x86 platform. There's only 8 general purpose registers available,
so on x86 we have to use segments to access the TLS. The approach used by
glibc so far was to set up a per-thread LDT entry to describe the TLS.
Besides the generic unrobustness of LDTs, this also introduced a limit:
the maximum number of LDT entries is 8192, so the maximum number of
threads per application is 8192.
this patch does it differently - the kernel keeps a specific per-thread
GDT entry that can be set up and modified by each thread:
asmlinkage int sys_set_thread_area(unsigned int base,
unsigned int limit, unsigned int flags)
the kernel, upon context-switch, modifies this GDT entry to match that of
the thread's TLS setting. This way user-space threaded code can access
per-thread data via this descriptor - by using the same, constant %gs (or
%gs) selector. The number of TLS areas is unlimited, and there is no
additional allocation overhead associated with TLS support.
the biggest problem preventing the introduction of this concept was
Linux's global shared GDT on SMP systems. The patch fixes this by
implementing a per-CPU GDT, which is also a nice context-switch speedup,
2-task lat_ctx context-switching got faster by about 5% on a dual Celeron
testbox. [ Could it be that a shared GDT is fundamentally suboptimal on
SMP? perhaps updating the 'accessed' bit in the DS/CS descriptors causes
some sort locked memory cycle overhead? ]
the GDT layout got simplified:
* 0 - null
* 1 - Thread-Local Storage (TLS) segment
* 2 - kernel code segment
* 3 - kernel data segment
* 4 - user code segment <==== new cacheline
* 5 - user data segment
* 6 - TSS
* 7 - LDT
* 8 - APM BIOS support <==== new cacheline
* 9 - APM BIOS support
* 10 - APM BIOS support
* 11 - APM BIOS support
* 12 - PNPBIOS support <==== new cacheline
* 13 - PNPBIOS support
* 14 - PNPBIOS support
* 15 - PNPBIOS support
* 16 - PNPBIOS support <==== new cacheline
* 17 - not used
* 18 - not used
* 19 - not used
set_thread_area() currently recognizes the following flags:
- in theory we could avoid the 'limit in pages' bit, but i wanted to
preserve the flexibility to potentially enable the setting of
byte-granularity stack segments for example. And unlimited segments
(granularity = pages, limit = 0xfffff) might have a performance
advantage on some CPUs. We could also automatically figure out the best
possible granularity for a given limit - but i wanted to avoid this kind
of guesswork. Some CPUs might have a plus for page-limit segments - who
knows.
- The 'writable' flag is straightforward and could be useful to some
applications.
- The 'clear' flag clears the TLS. [note that a base 0 limit 0 TLS is in
fact legal, it's a single-byte segment at address 0.]
(the system-call does not expose any other segment options to user-space,
priviledge level is 3, the segment is 32-bit, etc. - it's using safe and
sane defaults.)
NOTE: the interface does not allow the changing of the TLS of another
thread on purpose - that would just complicate the interface (and
implementation) unnecesserily. Is there any good reason to allow the
setting of another thread's TLS?
NOTE2: non-pthreads glibc applications can call set_thread_area() to set
up a GDT entry just below the end of stack. We could use some sort of
default TLS area as well, but that would hard-code a given segment.
A much needed (and widely tested) ACPI bugfix for kernel 2.5.28:
An u8 was casted into an u32, then all 32 bits were zeroed. This can cause
other values, e.g. "unsigned long flags" to be corrupted. When these
flags==0 are "restored", the system locks hard.
David Brownell [Thu, 25 Jul 2002 05:58:17 +0000 (22:58 -0700)]
[PATCH] ohci unlink cleanups
Attached is a patch that cleans up a few more issues in the OHCI unlink
code.
There may still be an ISO-IN data problem, I'll look at that separately
since it seems unrelated to unlink issues.
- Simplify/correct ED lifecycle
* UNLINK is now for real: descheduled and waiting for SOF
* finish_unlinks() expects descheduled EDs (may reschedule)
* only ed_deschedule() turns off hardware schedule processing
* no more NEW state
* no more ED_URB_DEL flag (it added extra states)
* new IDLE state, "not scheduled" (replaces previous UNLINKing)
- Bugfixes
* ed_get(), potential memleak is now gone
* urb_enqueue(), won't submit to dead/sleeping hc
* free_config(), rescans after SOF when needed
* ed_schedule(), use wmb()
* ed_schedule() and finish_unlinks(), more thorough about
restarting control or bulk processing
* finish_unlinks(), more cautious about reentering
- General:
* ed->ed_rm_list renamed ed_next; to be used more later
* slightly shrink object code
* rename some functions
This leaves one notable issue in the unlink paths: the driver never waits
for SOF after descheduling (empty) EDs. That's racey in most cases, though
there are a few light-traffic cases where that's correct (in part because
the ED is empty). Easy to fix once the rest of this is known to behave.
David Brownell [Thu, 25 Jul 2002 05:58:01 +0000 (22:58 -0700)]
[PATCH] ehci-hcd more polite on cardbus
This patch makes the EHCI driver behave reasonably well in the
cardbus configurations I can test ... basically, it now sees
when a card is gone, and cleans up accordingly. There are also
some related cleanups: hardware handshakes will time out (not
that I've ever seen them fail), and some state management puts
a bit more effort into being strictly to-spec.
Patrick Mochel [Thu, 25 Jul 2002 05:12:04 +0000 (22:12 -0700)]
driverfs: Don't use VFS for file or directory deletion
These are tied together a bit, so they're included in the same patch
Mainly, they move the taking of the inode's i_sem into the unlink and rmdir.
driverfs_rmdir doesn't call driverfs_unlink anymore, as it checks if the directory is empty
and conditionally does d_delete on it.
fs/namei.c implements d_unhash, which is called in vfs_rmdir. This isn't exported (yet),
so reimplement it here (at least until it's known that it's not needed or it's exported).
Patrick Mochel [Thu, 25 Jul 2002 04:24:54 +0000 (21:24 -0700)]
driverfs: don't use vfs for creating symlinks
Add check for existence of dentry in driverfs_symlink and driverfs_mknod (which the other creation
functions use).
Patrick Mochel [Thu, 25 Jul 2002 04:13:01 +0000 (21:13 -0700)]
driverfs: stop using vfs layer for file creation
This is the first of a series of patches to driverfs to _not_ use the vfs layer for file creation
and deletion.
The VFS layer is allowing files and directories to be removed from userspace, which we don't want
at all.
Per Al Viro's suggesting, I am pushing the necessary checks from the vfs_* functions into the
driverfs functions, and calling them directly from the kernel interface to driverfs.
Sam Ravnborg [Thu, 25 Jul 2002 02:34:53 +0000 (19:34 -0700)]
[PATCH] docbook: Call docbook makefile with -f [9/9]
The rewritten makefile for DocBook requires that working directory
is $(TOPDIR) therefore use -f Documentation/DocBook/Makefile to
invoke the docbook makefile.
Sam Ravnborg [Thu, 25 Jul 2002 02:34:15 +0000 (19:34 -0700)]
[PATCH] docbook: Update documentation to reflect new docproc [7/9]
kernel-doc-nano-HOWTO.txt updated to reflect new functionality
provided by docproc.
gen-all-syms and docgen description removed.
kernel-api.tmpl and parportbook.tmpl updated to specify files to search
for EXPORT-SYMBOL* to enable documentation of all relevant functions.
Sam Ravnborg [Thu, 25 Jul 2002 02:33:55 +0000 (19:33 -0700)]
[PATCH] docbook: Makefile cleanup [6/9]
Massive cleanup of makefile.
Comments added as well.
Enabled by the new functionality provided by docproc
When generating HTML locate a new file in DocBook dir that points to
the book in question.
Sam Ravnborg [Thu, 25 Jul 2002 02:33:34 +0000 (19:33 -0700)]
[PATCH] docbook: scripts/docproc improved [5/9]
This is the first patch in a serie to clean-up the DocBook
Makefile.
docproc is extented to include the functionality previously provided by
gen-all-syms and docgen. Furthermore the necessity to specify which
files to search for EXPORT_SYMBOL are removed, the information is now
read in the .tmpl files.
docproc is furthermore extended to generate dependency information.
gen-all-syms and docgen are deleted.
Sam Ravnborg [Thu, 25 Jul 2002 02:33:15 +0000 (19:33 -0700)]
[PATCH] kernel-doc: Fix warnings [4/9]
During processing of skbuff.h three warnings were issued,
because members of an enum within a struct were nor documented.
This patch fixes kernel-doc not to spit out these non-valid warnings.
Originally by Thunder.
Petr Vandrovec [Thu, 25 Jul 2002 02:27:25 +0000 (19:27 -0700)]
[PATCH] ipx use of cli/sti
This removes cli/sti from SPX registration code in IPX. I decided to
use normal rw_semaphore instead of net_family_{write,read}_{lock,unlock}
used in net/socket.c.
I left SPX code itself alone: I do not use it and last time I checked it
it was very unreliable reliable transport.
This patch for 2.5.28 reduces the stack frame size of
arch/i386/kernel/nmi.c:check_nmi_watchdog() from 4096 bytes
in the worst case to 128 bytes.
The problem with the current code is that it copies the entire
irq_stat[] array, when only a single field (__nmi_count) is of
interest. The irq_stat_t element type is only 28 bytes, but it
is also ____cacheline_aligned, and that blows the array up to
4096 bytes on SMP P4 Xeons, 2048 bytes on SMP K7s, and 1024 bytes
on SMP P5/P6s. The patch reduces this to NR_CPUS*4==128 bytes.
[PATCH] Ensure xtime_lock and timerlist_lock are on difft cachelines
I've noticed that xtime_lock and timerlist_lock ends up on the same
cacheline all the time (atleaset on x86). Not a good thing for
loads with high xxx_timer and do_gettimeofday counts I guess (networking etc).
Richard Russon [Thu, 25 Jul 2002 02:14:52 +0000 (19:14 -0700)]
[PATCH] New LDM Driver (Windows Dynamic Disks)
This is a complete rewrite of the LDM driver (support for Windows
Dynamic Disks). It incorporates Al Viro's recent partition handling
tidy ups.
Details:
LDM Driver rewritten. More efficient. Much smaller memory footprint.
The old driver was little more than a stopgap.
The new driver is a complete rewrite
based on a much better understanding of the database
based on much more reverse engineering
more able to spot errors and inconsistancies
it has a much smaller memory footprint
no longer considered experimental
accompanied by brief info: Documentation/ldm.txt
Anton Blanchard [Thu, 25 Jul 2002 01:54:01 +0000 (18:54 -0700)]
[PATCH] Missing memory barrier in pte_chain_unlock
On a ppc64 machine running 2.5.28 we were hitting this BUG in
__free_pages_ok:
BUG_ON(page->pte.chain != NULL);
In pte_chain_lock we use test_and_set_bit which implies a memory
barrier. In pte_chain_unlock we use clear_bit which has no memory
barriers so we need to add one.
Patrick Mochel [Thu, 25 Jul 2002 01:50:07 +0000 (18:50 -0700)]
Remove BKL from driverfs
- in mkdir: we already hold parent directory's semaphore (c.f. driverfs_create_dir)
- in create: ditto (c.f. driverfs_create_file)
- in unlink: ditto (c.f. driverfs_remove_file) and file's i_sem is taken in vfs_unlink
- un lseek: take inode's i_sem (though I think we can replace this with a common lseek function...later)
Add EVIOCSABS() ioctl to change the abs* informative
values on input devices. This is something the X peoople
really wanted.
Rename input_devinfo to input_id, it's shorter and more
to the point.
Remove superfluous printks in uinput.c
Clean up return values in evdev.c ioctl.
Because the Linux Input core follows the USB HID standard where it
comes to directions of movement and rotation, a mouse wheel should
be positive where it "rotates forward, away from the user". We had
the opposite in psmouse.c. Fixed this.