Martin Dalecki [Wed, 29 May 2002 03:22:20 +0000 (20:22 -0700)]
[PATCH] 2.5.18 IDE 75
- Comment out config_chipset_for_pio from hpt366 driver. It seems to hang on it
and many people consistently reported that this may be necessary.
Well apparently this host chip is forced to be in DMA read mode anyway
and we where undoing this there.
- Apply small cosmetics to pdc202xx.c driver by Thierry Vignaud.
His change log entries follow:
- factorize constants with PDC_CLOCK and UDMA_SPEED_FLAG macros and
the init_high_16() static inline functions, thus removing floating
constants in code
- remove unused variables and pci space read
- kill useless code in pdc202xx_udma_irq_status() resulting in
removing unused variable: the code does lots of tests to check what
value to return but just always return the same exact value in all
code paths!
this also saves a few cpu & pci bus cyles by removing a useless read
in pci space
- simplify #if/#else resulting in code duplication
- make init_pdc202xx clearer
- remove duplicated initializations in config_drive_xfer_rate() and
simplify code paths
- Kill unused init_speed member from ata_device struct. Spotted by
M.H.VanLeeuwen.
Jan Kara [Wed, 29 May 2002 02:45:05 +0000 (19:45 -0700)]
[PATCH] Quota update [3/3]
Remove the old backward-compatible quota interface.
The patch also contains a renaming of functions vfs_{get|set}_info() to
vfs_{get|set}_dqinfo() and minor compilation fix needed for 2.5.18
(include <linux/namei.h>).
Martin Dalecki [Wed, 29 May 2002 02:14:28 +0000 (19:14 -0700)]
[PATCH] 2.5.18 IDE 73
- Merge ide-probe.c and ide-features.c in to one single file. They are
mutually doing basically the same and in esp. in case of the device ID
retrieval there *is* quite a lot of code duplication between them.
ide-geometry.c fits there as well.
- Remove ide_xfer_verbose - it wasn't really used.
- Don't allow check_partition to be more clever then the writer of a driver.
It was interfering with drivers which check partitions as they go and
finally if we want to spew something about it - we can do it ourself.
- Eliminate ide_geninit(). We scan for partitions now inside the recently
introduced attach method. register_disk() is broken by the way and 90% of
places where it's used it is doing literally nothing. Either some one didn't
finish some code or the code is basically just junk from the past.
Anyway we grok the partitions now one by one as we detect the channels.
- ide_driveid_update is gone. We don't report the drive id through /proc/ide
and we don't have to update it any longer on the fly. Still someone out there
complaining that it went away!?
- Use the global driver spin-lock to protect data structure access in the
ide_register_subdriver() function instead of blatantly disabling all
interrupts.
Jens Axboe [Wed, 29 May 2002 01:40:17 +0000 (18:40 -0700)]
[PATCH] block plugging reworked/fixed
This implements what we discussed, basically just maintaing a plug list
from the block layer as a direct parallel to the tq_disk task queue we
had before. blk_run_queues() now splices the blk_plug_list to avoid
holding the blk_plug_lock across all the request_fn calls.
Added the driver to the 2.5 tree. The original code for 2.4 was
written by Pei Liu <pbl@cypress.com> but cleaned up a bit and
ported to 2.5 by me. Any problems in the driver is probably due to
my messing with it.
This driver is for the SL811HS USB host controller chip from
Cypress and is typically contained on a ARM based embedded
system.
kbuild: Provide correct 'make some/dir/file.[iso]'
Don't include Rules.make in the top-level Makefile, we don't
actually build anything from there, so we don't need the rules.
If asked to build some file in a subdirectory, descend into the
subdir and build it from there - only there we can know what
extra flags etc we have to add.
This also works for building preprocessed [.i] and assembler
output [.s].
Basically only cosmetics, and move the 'update-modverfile:'
rule from Rules.make to the top-level Makefile, since that's the
only place where it's used.
kbuild: Group together descending/linking in drivers/*
We currently decide whether we need to descend into the subdirs of
drivers/ in drivers/Makefile, but link the resulting objects from
the top-level Makefile.
Making these two decisions at the same time (in drivers/Makefile) cleans
up the top-level Makefile quite a bit.
Link order does not change at all apart from sound/, which is now linked
last.
Brian Gerst [Tue, 28 May 2002 15:02:27 +0000 (08:02 -0700)]
[PATCH] i386 mm init cleanup part 1
This revised patch starts untangling the mess in arch/i386/mm/init.c
- Pull setting bits in cr4 out of the loop
- Make __PAGE_KERNEL a variable and cache the global bit there.
- New pfn_pmd() for large pages.
Many Makefiles did a put an own rule in front of
"include $(TOPDIR)/Rules.make" for no good reason at all,
the only places where it made sense are converted to using
EXTRA_TARGETS now.
Trond Myklebust [Tue, 28 May 2002 13:03:53 +0000 (06:03 -0700)]
[PATCH] RPC client receive deadlock removal on HIGHMEM systems
Remove another class of rpciod deadlocks on HIGHMEM systems. Kick habit of
keeping pages kmap()ed for the entire duration of NFS
read/readdir/readlink operations.
Use struct page directly in RPC client data receive buffer. TCP and UDP
sk->data_ready() bottom-halves copy (and checksum when needed) data into
pages rather than iovecs. atomic_kmap() of single pages is used for the
copy.
include/linux/xdr.h
Declare structure for copying an sk_buff here rather than in xprt.c.
Forward declaration of new functions.
include/linux/sunrpc/xprt.h
RPC client receive buffer changed to use new format 'struct xdr_buf'.
net/sunrpc/clnt.c
Initialize new format receive buffer.
net/sunrpc/xdr.c
xdr_inline_pages() inlines pages into the receive buffer.
xdr_partial_copy_from_skb() replaces csum_partial_copy_to_page_cache()
and copy code in tcp_read_request(). Provides sendfile()-style
method for copying data from an skb into a struct xdr_buf.
xdr_shift_buf() replaces xdr_shift_iovec() for when we overestimate
the size of the RPC/NFS header.
net/sunrpc/xprt.c
Adapt UDP and TCP receive routines to use new format xdr_buf.
Trond Myklebust [Tue, 28 May 2002 13:03:42 +0000 (06:03 -0700)]
[PATCH] Teach RPC client to send pages rather than iovecs.
Stop rpciod from deadlocking against itself in map_new_virtual() on HIGHMEM
systems. RPC client currently has to keep all pages that are scheduled for
transmission kmap()ed into an iovec for the entire duration of the call.
We only actually need to kmap() pages while making the (non-blocking)
call to sock_sendmsg().
NOTE: When transmitting several pages in one RPC call, sock_sendmsg()
requires us to kmap() *all* those pages at the same time. Opens for
deadlocks between rpciod and some other process that also kmaps more
than 1 page at a time.
For the TCP case we can solve later by converting to TCP_CORK+sendpage().
include/linux/sunrpc/xdr.h
Introduce 'struct xdr_buf' in order to allow RPC layer to handle
pages directly.
include/linux/sunrpc/xprt.h:
Convert the RPC client send-buffer to the new format.
net/sunrpc/clnt.c
Initialize the new format RPC send-buffer.
net/sunrpc/xdr.c
xdr_kmap() kmap()+copy a struct xdr_buf into an iovec array.
xdr_kunmap() clean up after xdr_kmap().
xdr_encode_pages() used to inline pages for transmission.
net/sunrpc/xprt.c
xprt_sendmsg() needs to kmap() the pages into an iovec for transmission.
include/linux/nfs_xdr.h
struct nfs_writeargs transmits full page information.
Convert nfs_rpc_ops->write() to send pages.
fs/nfs/write.c
Adapt to new format nfs_writeargs / nfs_rpc_ops->write()
Stephen Rothwell [Tue, 28 May 2002 12:52:39 +0000 (05:52 -0700)]
[PATCH] consolidate do_signal
11 out of our 17 architectures have basically the same code
in arch/../kernel/signal.c:do_signal. This patch creates a
common function for that bit of code and uses it in the places
it can be.
The 2.5.15 version of this patch builds and runs on i386 and PPC and has
been briefly looked at by the CRIS, PARISC, PPC64 and x86_64 maintainers.
As a bonus, this fixes the "ignore SIGURG" bug for 9 more architectures
(i386 and PPC already were fixed).
Stephen Rothwell [Tue, 28 May 2002 12:52:34 +0000 (05:52 -0700)]
[PATCH] consolidate generic peices of the siginfo structures and associated stuff
This patch creates asm-generic/siginfo.h and uses it to remove a
lot of duplicate code in the various asm-*/siginfo.h files. Some
if it is a little ugly, but I think it will be worth it just to
help us eliminate some of the bugs that have come from code copying.
Stephen Rothwell [Tue, 28 May 2002 12:51:30 +0000 (05:51 -0700)]
[PATCH] consolidate arch specific copy_siginfo_to_user
This patch moves a version of copy_siginfo_to_user that is common to
ten of our architectures into the gerneic code and allows the other
architectures to override it. I suspect more of the remaining
architectures will be able to use it as well once it is fixed (patch
to follow).
Jens Axboe [Tue, 28 May 2002 12:39:17 +0000 (05:39 -0700)]
[PATCH] block plugging reworked
This patch provides the ability for a block driver to signal it's too
busy to receive more work and temporarily halt the request queue. In
concept it's similar to the networking netif_{start,stop}_queue helpers.
To do this cleanly, I've ripped out the old tq_disk task queue. Instead
an internal list of plugged queues is maintained which will honor the
current queue state (see QUEUE_FLAG_STOPPED bit). Execution of
request_fn has been moved to tasklet context. blk_run_queues() provides
similar functionality to the old run_task_queue(&tq_disk).
Now, this only works at the request_fn level and not at the
make_request_fn level. This is on purpose: drivers working at the
make_request_fn level are essentially providing a piece of the block
level infrastructure themselves. There are basically two reasons for
doing make_request_fn style setups:
o block remappers. start/stop functionality will be done at the target
device in this case, which is the level that will signal hardware full
(or continue) anyways.
o drivers who wish to receive single entities of "buffers" and not
merged requests etc. This could use the start/stop functionality. I'd
suggest _still_ using a request_fn for these, but set the queue
options so that no merging etc ever takes place. This has the added
bonus of providing the usual request depletion throttling at the block
level.
Robert Love [Tue, 28 May 2002 12:03:31 +0000 (05:03 -0700)]
[PATCH] O(1) count_active_tasks
This is William Irwin's algorithmically O(1) version of
count_active_tasks (which is currently O(n) for n total tasks on the
system).
I like it a lot: we become O(1) because now we count uninterruptible
tasks, so we can return (nr_uninterruptible + nr_running). It does not
introduce any overhead or hurt the case for small n, so I have no
complaints.
This copy has a small optimization over the original posting, but is
otherwise the same thing wli posted earlier. I have tested to make sure
this returns accurate results and that the kernel profile improves.
Patrick Mochel [Tue, 28 May 2002 11:02:33 +0000 (04:02 -0700)]
PCI: start to use common fields of struct device_driver more
- add struct device_driver field to struct pci_driver
- make sure those fields get set on driver registration (and register with core)
- remove internal pci_drivers
Patrick Mochel [Tue, 28 May 2002 10:59:17 +0000 (03:59 -0700)]
Beef up centralized driver mgmt:
- add name, bus, lock, refcount, bus_list, devices, and dir fields to struct
- add release callback to be called when refcount hits 0
- add helpers for registration and refcounting
- create directory for driver in bus's directory
Martin Dalecki [Tue, 28 May 2002 09:25:46 +0000 (02:25 -0700)]
[PATCH] 2.5.18 QUEUE_EMPTY and the unpleasant friends.
- Eliminate all usages of the obscure QUEUE_EMPTY macro.
- Eliminate all unneccessary checks for RQ_INACTIVE, this can't happen during
the time we run the request strategy routine of a single major number block
device. Perhaps the still remaining usage in scsi and i2o_block.c should be
killed as well, since the upper ll_rw_blk layer shouldn't pass inactive
requests down.
Those are all places where we have deeply burried and hidden major number
indexed arrays. Let's deal with them slowly...
Martin Dalecki [Tue, 28 May 2002 09:25:34 +0000 (02:25 -0700)]
[PATCH] airo
Since apparently no body else did care thus far, and since I'm using
this driver, well here it comes:
- Adjust the airo wireless LAN card driver for the fact that modules
don't export symbols by default any longer.
- Make some stuff which obivously should be static there static as well.
(Plenty of code in Linux actually deserves a review for this
far too common bug...)
Robert Love [Tue, 28 May 2002 09:22:13 +0000 (02:22 -0700)]
[PATCH] preempt-safe net/ code
This fixes three locations in net/ where per-CPU data could bite us
under preemption. This is the result of an audit I did and should
constitute all of the unsafe code in net/.
In net/core/skbuff.c I did not have to introduce any code - just
rearrange the grabbing of smp_processor_id() to be in the interrupt off
region. Pretty clean fixes.
Note in the future we can use put_cpu() and get_cpu() to grab the CPU#
safely. I will send a patch to Marcelo so we can have a 2.4 version
(which doesn't do the preempt stuff), too...
Robert Love [Tue, 28 May 2002 09:21:53 +0000 (02:21 -0700)]
[PATCH] set_cpus_allowed optimization
This adds an optimization to set_cpus_allowed: if the task is not
running, there is no sense in kicking the migration_threads into action,
we just need to update task->cpu. This was suggested by Mike Kravetz.
Besides being an optimization, this would prevent any future race
between set_cpus_allowed and the migration_threads.
Robert Love [Tue, 28 May 2002 09:21:39 +0000 (02:21 -0700)]
[PATCH] documentation for the new scheduler
This adds documentation about the O(1) scheduler to Documentation/. The
new scheduler is complicated and providing future scheduler hackers some
background seems a Good Thing to me.
Specifically:
- add Documentation/sched-coding.txt: an overview of the functions,
magic numbers, and variables in the scheduler as well as (most
importantly) a review of the locking semantics.
- add Documentation/sched-design.txt: an edited version of Ingo's
initial email to lkml about his scheduler. Goes over the design,
implementation, and goals of the scheduler. I tried to edit it where
needed to bring it in line with the scheduler as it is today.
- modify kernel/sched.c: update your copyright and add a change entry
for the new scheduler.
Robert Love [Tue, 28 May 2002 09:21:25 +0000 (02:21 -0700)]
[PATCH] trivial: no "error" on preempt_count notice
The attached trivial patch simply changes the printk debug statement in
do_exit when preempt_count!=0 to say "note" instead of "error" and log
at KERN_INFO in lieu of KERN_ERR.
I want to keep the message around a bit, but people get too paranoid
when things like nfsd legitimately exit with a preempt_count=1.
o build modules as listed in $(obj-m) and
o build $(L_TARGET)/$(O_TARGET) as a composite object containing $(obj-y)
However, there is one exception: typically arch/$ARCH/kernel Makefile
wants the same as above, plus
o build init_task.o, head.o, using the standard rules for built-in
targets - i.e. they are supposed to be built in the same way as all
the other targets listed in $(obj-y), but they should not be linked
into arch/$ARCH/kernel/$(O_TARGET). Instead they'll be linked in
directly in the final vmlinux link.
Currently this is achieved by overriding Rules.make's first_rule in
arch/$ARCH/kernel/Makefile. This rather ad-hoc way relies on the knowing
how Rules.make works internally and at the same time does things behind
Rules.make's back.
To clean this up, I'm introducing a new variable, supposed to be only
used in arch/$ARCH/kernel/Makefile:
$(EXTRA_TARGETS) can be used to declare additional objects which shall
be built in the current directory (using the flags for built-in objects),
but not linked into $(O_TARGET)/$(L_TARGET)
This patch only converts arch/i386/kernel/Makefile at this time, other
archs work the same way as before.
Apart from this, this patch also removes some "unexport ..." statements,
which are unnecessary since not exporting variables is the default and
renames the internal "all_targets" to "vmlinux", since it's actually
need for building vmlinux.
kbuild: Normal sources should not include <linux/compile.h>
include/linux/compile.h is a generated file, only init/Makefile knows
about it - including it outside of init/* will cause trouble on
parallel builds.
Also, when compile.h already exists when 'make dep' is run, that'll pick
up a dependency on $(TOPDIR)/include/linux/compile.h. So init/Makefile
needs to tell make that this is actually the same file as
../include/linux.compile.h
Andrew Morton [Mon, 27 May 2002 12:15:03 +0000 (05:15 -0700)]
[PATCH] avoid sys_sync livelocks
This makes sure that sys_sync() will terminate. It counts up the
number of dirty pages in the machine and will refuse to write out more
than 1.25 times this number of pages. This function is called twice
on the sys_sync() path, so the kernel will actually write 2.5x the number
of initially-dirty pages before giving up.