This patch allows ov511 to build again by removing references to
urb->next. It now resubmits in the completion handler and properly sets
urb->interval.
David S. Miller [Wed, 5 Jun 2002 20:22:35 +0000 (13:22 -0700)]
Fix generic device layer init sequence.
Generic BUS objects have to be registered before
devices assosciated with them are probed. Therefore
subsys_initcall is inappropriate for such setups.
It does not work to use core_initcall for this because
the generic device layer bits need to be setup first too.
So we rename unused_initcall to postcore_initcall and use
this new initcall level for generic BUS object init.
This fixes bootup on Alpha, and Sparc64. X86 was working
by what looks to be luck in link order.
So here we are: make vmlinux/bzImage/whatever will now also build
modules as it goes. Other than that, everything works as usual.
"make modules" builds only the modules (but you shouldn't need
it anymore). If you don't want the modules built, you can
do "make KBUILD_MODULES= vmlinux/whatever" to only compile built-in
objects.
If people want it, I can also allow for "make vmlinux/whatever nomodules"
to do the same.
Also, add ' ' in Rules.make to properly align output in quiet mode.
If an object was changed to not export symbols anymore, the
corresponding stale .ver file would have been left lying around
and been picked up when generating modversions.h.
The obvious solution to remove include/linux/modules/* at the
beginning of "make dep" is not really good, since that means
that .ver files would be regenerated unconditionally, thus causing
a lot of possibly unnecessary rebuilds.
So, instead, we build a temporary shadow tree of all export-objs
(as empty files) during the recursive "make fastdep" phase, and use
that to generate modversions.h.
Ensure that we touch include/linux/modversions.h if any of the
.ver files changes, that's our marker to rebuild all modversions
affected files.
Rules.make now has three targets:
o default (a.k.a first_rule): The actual build. Deciding whether
to build built-in or modular or both is decided by
$(KBUILD_MODULES) and $(KBUILD_BUILTIN) now, instead of using
different targets
o fastdep: doesn't actually dependencies anymore, only generates
modversions
o modules_install: Well, you guess what that does.
Cleaned up descending, and no more differentiating between
$(subdir-y) and $(subdir-m). That means $(mod-subdirs) can
go away now.
kbuild: Use deep directory structure for include/linux/modules
We used to force the obvious deep structure of all objects which
export symbols into a flat list in include/linux/modules. This
initially caused the restriction the no two exporting objects could
have the same name (Ever wondered why there's ksyms.c and
i386_ksyms.c?)
With the ALSA merge this restriction was mostly lifted by some hack,
but some cases still don't work right (Hi XFS). As it's much cleaner
to just use a normal tree under include/linux/modules, reflecting the
source tree, we now do just that.
Making dependencies once up front is not ideal. For one, you don't need
them initially, since when you don't have the .o file, you bet you have
to build it no matter what the dependencies say - dependencies are about
deciding when to *re*build.
There's more reasons, like:
o you don't even know which files you'll build, so you have to go over
all files (even over drivers/{sbus,s390,...} on i386)
o generated files don't exist yet, so you cannot pick up dependencies
on them
o even if dependencies are right initially, they change when you work on
your tree or patch it, and nobody will notice unless you run "make dep"
explicitly again
Anyway, gcc knows hows to emit a correct dependency list, so we just use
that. Well, a little bit of hacking is necessary to remove the dependency
on autoconf.h and put in individual CONFIG_WHAT_EVER dependencies instead,
since otherwise changing one config option would cause everything to be
rebuilt.
I should add that I didn't come up with this all by myself, most work
is actually done in gcc and there were discussions about using -MD on
kbuild-devel way back, so I should mention Keith Owens and Michael
Elizabeth Chastain, and probably others that I forgot, so I apologize
just in case.
We source some scripts, but still pass parameters to them, e.g.
. mk_version_h $@ $(KERNELRELEASE) $(VERSION) ...
This does not work for all kinds of /bin/sh (it does for bash, that's
why I did not notice).
The fix is easy: Just mark the scripts executable and call instead of
source them.
Unfortunately, patch(1) doesn't understand about propagating chmod.
bk does, so changing the tree isn't hard, and we introduce an explicit
chmod a+x executed during the build for propagating this change into
those trees which get "traditionally" patched up.
Just use 'make some/dir/foo.lst' to produce mixed source code and
assembly for debugging. (If the object gets linked in and you have
a System.map, it'll relocate appropriately)
Apart from the needed Makefile bits, also clean up the script
"makelst".
kbuild: Split Makefile into needs / needs not .config
The current top-level Makefile has a fundamental problem which
makes "make oldconfig vmlinux" impossible:
It includes .config, which is changed by "oldconfig". So after "oldconfig"
.config has changed and the .config the Makefile had read is obsolete.
make provides a mechanism to cope with this, it'll restart automatically
if any of the files it included changed, if you let it know that you
changed it, just using a normal rule which has .config as its target.
However, once you tell make that "make oldconfig" changes .config, you
have another problem: oldconfig always uses .config to be remade, there's
no mechanism to tell if it's up to date. So makes notices that .config
has changed, restarts, makes oldconfig again, notices that .config has
changed, restarts, ... you get the picture.
The way to solve this is to do a proper two-stage approach: If you just
say "make oldconfig", there's no need for the Makefile to even read the
.config. If it does not, it won't restart and recurse infintely.
So we divide the Makefile into two sections: One for targets which don't
need the variables from .config, like *config, clean, mrproper and
one section which does the actual build, which needs to know the
CONFIG_ options.
If one of the "noconfig" targets is given, we handle those, without
reading .config. From there, we call make again, filtering out the already
handled targets, to do the main work.
The fact that this actually works correctly can be seen by trying
"make vmlinux oldconfig" which will execute things in the right
order - and this is not just nitpicking, it means that "-j" will
get this case right, too.
The $(CONFIGURATION) hack used to start "make config" automatically
can go away now, too. Since we don't know which of make *config the
user prefers, we'll just ask him call "make whatever-config" himself,
instead of forcing "make config" on him.
David Brownell [Wed, 5 Jun 2002 05:18:01 +0000 (22:18 -0700)]
[PATCH] synchronous control/bulk messaging
This one-liner fixes a problem in synchronous messaging
with usb_bulk_msg(), usb_control_msg(), and everything
that calls usb_control_msg(): you're not allowed to call
blocking functions when you're already on a wait queue.
A better fix would be to just stick the thread on the
wait queue _after_ submitting the URB, but that should
involve more testing than I have time for just now.
David Brownell [Wed, 5 Jun 2002 05:17:50 +0000 (22:17 -0700)]
[PATCH] ohci-hcd, fix urb unlink races
This patch:
- Fixes a longstanding urb unlink race, by switching to a single queue
for EDs being unlinked. The previous two-queue scheme was sensitive to
IRQ latencies: one extra millisecond would make it use the wrong queue.
This updated scheme should handle latencies of up to 32K microseconds
(Cthulu forfend :) and slightly shrinks object code size.
- Related (mostly) cleanup. Some functions and one ED field renamed, ED
layout is a smidgeon more compact (even given more data), driver version
string doesn't reflect CVS, debug message only comes out in verbose mode.
Dave Jones [Wed, 5 Jun 2002 04:25:42 +0000 (21:25 -0700)]
[PATCH] large x86 setup cleanup.
Patrick Mochel did a great job here at splitting up some of the larger
messy parts of arch/i386/kernel/setup.c, and introduced a nice abstraction
which gives us a much nicer way to ensure we can add workarounds for vendor
specific bugs / features without polluting other vendor code paths.
Mark Haverkamp also brought this up to date for merging in my tree circa
2.5.14, and asides from 1-2 now fixed small thinkos, there haven't been
any problems.
This also features a workaround for an errata item on stepping C0 of
the Intel Pentium 4 Xeon, which isn't in your tree yet, where we must
disable the hardware prefetcher to ensure sane operation.
Tom Rini [Wed, 5 Jun 2002 02:42:57 +0000 (19:42 -0700)]
[PATCH] Cleanup i386 <linux/init.h> abuses
The following patch cleans up the i386 usage of <linux/init.h>.
This remove <linux/init.h> from <asm-i386/system.h> which did not need
it, <asm-i386/highmem.h> which only had it due to an extern using
__init, which is not needed.
This adds <linux/init.h> to <asm-i386/bugs.h> which actually has
numerous __init functions and adds <linux/init.h> to 9 files inside of
arch/i386 which were indirectly including <linux/init.h> previously.
We do not need to pass the file descriptor to the fcntl_[sg]etlk
functions, only the struct file * which we have already got
from the file descriptor and verified.
Martin Dalecki [Wed, 5 Jun 2002 02:39:20 +0000 (19:39 -0700)]
[PATCH] 2.5.20 IDE 85
- Work a bit on the automatic CRC error recovery handling. System still hangs.
But one thing for sure - we don't have to use any specialized irq handler for
it.
- Since ioctl don't any longer submit requests to the queue without
rq->special set, we can safely remove args_error handling from
start_request.
- Make REQ_SPECIAL usage in ide-floppy obvious.
- Use REQ_SPECIAL everywhere instead of REQ_DRIVE_ACB. This is actually a bit
dangerous but should work as far as I can see.
- Unfold the now not REQ_SPECIAL specific dequeing part of ide_end_drive_cmd().
Turns out that we can thereafter remove the calls to ide_end_drice_cmd() at
places where the request type isn't REQ_SPECIAL all any longer. (tcq.c)
- After the above operation it turns out that there are just two places where
ide_end_drive_cmd remains, namely: ata_error, task_no_data_intr
drive_cmd_intr.
We can avoid it by changing the logics in ata_error a slightly.
So now just to cases remain where ide_end_drive_cmd remains used:
drive_cmd_intr and task_no_data_intr.
- Now looking a bit closer we can realize that drive_cmd_intr and
task_no_data_intr can be easly merged together, since the usage of
task_no_data_intr implied taskfile.sector_number == 0.
- Use one single ata_special_intr function for the handling of interrupts
submitted through ide_raw_cmd.
- Move the remaining artefacts of ide_end_drive_cmd directly to
ata_special_intr. Oh we don't need to check for REQ_SPECIAL any longer there,
since the context is already known.
- Set the ata_special_intr handler and command type directly inside
ide_raw_taskfile to save code.
Russell King [Wed, 5 Jun 2002 01:19:28 +0000 (02:19 +0100)]
[ARM] Clean up map_desc structure
- remove LAST_DESC in favour of passing the array size to iotable_init
- replace domain and permission bits/cache attributes with a generic
"type", which can be easily converted to the required domain and
permission bits/cache attributes at run time. It also removes the
possibility for getting such things wrong and (accidentally)
allowing all user space to fiddle with devices directly.
Robert Love [Tue, 4 Jun 2002 07:31:55 +0000 (00:31 -0700)]
[PATCH] remove suser()
Attached patch replaces the lone remaining suser() call with capable()
and then removes suser() itself in a triumphant celebration of the glory
of capable(). Or something. ;-)
Small cleanup of capable() and some comments, too.
Martin Dalecki [Tue, 4 Jun 2002 02:34:23 +0000 (19:34 -0700)]
[PATCH] 2.5.20 IDE 84
- Simplify ide_cmd_type_parse by removing the handling of commands which we
never use.
- Realize that pre_task_out_intr and pre_task_mulout_intr are semanticaly
identical. Use only pre_task_out_intr(). This allowed us to
eliminate the prehandler altogether.
- Updated fix for misconfigured host chips by Vojtech Pavlik.
- Be more permissive about ioctl handling to allow device type drivers to do
they own checks.
- ali14xx cleanups by Andrej Panin.
- Unfold usage ide_cmd_type_parser in tcq.c code. This makes this operation
local to ide-disk.c. Move it as well as the interrupt handlers used only for
the handling of disk requests there too.
- Guard against calling handler before the drive is ready for it in
ata_taskfile()! Well this bug was there before, but right now we inform
about it.
- Unfold ide_cmd_type_praser in ide-disk.c. Merge the remaining bits of it with
get_command. Well it's no more.
- Move recal_intr to ide.c - the only place where it's used.
This doesn't change the "mechanics" of the code but it makes it a lot more
"obvious" what's going on.
Russell King [Tue, 4 Jun 2002 02:28:48 +0000 (19:28 -0700)]
[PATCH] fix 2.5.20 ramdisk
2.5.20 seems to be incapable of executing binaries in a ramdisk-based
root filesystem. The ramdisk in question is an ext2fs, with a 1K
block size loaded via the compressed ramdisk loader in do_mounts().
It appears that, in the case of a 1K block sized filesystem, we attempt
to read two 512-byte sectors into a BIO vector. The first one is copied
into the first 512 bytes. The second sector, however, is copied over
the first 512 bytes. Obviously not what we really want.
Patrick Mochel [Mon, 3 Jun 2002 12:53:50 +0000 (05:53 -0700)]
PCI driver mgmt:
- Make sure proper pci id is passed to probe()
- make sure pci_dev->driver is set and reset on driver registration/unregistration
- call remove_driver to force unload of driver on unregistration
Patrick Mochel [Mon, 3 Jun 2002 12:51:12 +0000 (05:51 -0700)]
Do manual traversing of drivers' devices list when unbinding the driver.
driver_unbind was called when drv->refcount == 0.
It would call driver_for_each_dev to do the unbinding
The first thing that would do was get_device, which...
BUG()'d if drv->refcount == 0.
Duh.
Patrick Mochel [Mon, 3 Jun 2002 12:48:44 +0000 (05:48 -0700)]
device model udpate:
- make sure drv->devices is initialized on registration (from Peter Osterlund)
- add remove_driver for forcing removal of driver
There was a potential race with the module unload code. When a pci driver was unloaded, it would call pci_unregister_driver, which would simply call put_driver.
If the driver's refcount wasn't 0, it wouldn't unbind it from devices, but the module unload would still continue.
If something tried to access the driver later (since everyone thinks its still there), Bad Things would happen.
This fixes it until there can be tighter integration between the device model and module unload code.
Pavel Machek [Mon, 3 Jun 2002 06:25:54 +0000 (23:25 -0700)]
[PATCH] Cleanup swsusp in 2.5.20
This cleans up swsusp in 2.5.20. Killed sysrq-D support (it is too
much trouble to support suspending from interrupt), kill unused
define, fix compile-time warnings (thanks to Adam).
Pavel Machek [Mon, 3 Jun 2002 06:25:44 +0000 (23:25 -0700)]
[PATCH] Fix suspend-to-RAM in 2.5.20
I created arch/i386/suspend.c not to clash with ACPI people so much in
future. (More stuff is going to move into it in the future, to clean
up functions that really do not belong to the headers.)
Zwane Mwaikambo [Mon, 3 Jun 2002 05:55:16 +0000 (22:55 -0700)]
[PATCH] bluesmoke merge
This patch merges in all the currently outstanding bluesmoke bits from
2.5-dj to 2.5.20, it also has the pleasant side effect of fixing the
compilation. Test compiled with and without MCE.
Dan Kegel [Mon, 3 Jun 2002 05:35:05 +0000 (22:35 -0700)]
[PATCH] must be __KERNEL__ for byteorder/generic.h
Here's that patch again (MIME this time, so tabs don't get
lost by my silly gui mailer); applies cleanly against against 2.4.19-pre8.
Nobody commented on it last time I posted it, and it does
make compiling gcc easier, so I guess that makes it trivial patch
monkey fodder. Or am I making a silly mistake?
Randy Hron [Mon, 3 Jun 2002 05:34:56 +0000 (22:34 -0700)]
[PATCH] remove space in cache names
Most /proc/slabinfo cache_names are in the format:
cache_name. There are a couple with spaces in the
name, which is inconsistent and requires a special case
when scripting.
Changes "fasync cache" and "file lock cache" to have
the usual underscore.
inactive_list and active_list are global, yet they are repeatedly
initialized using INIT_LIST_HEAD() in free_area_init_core(). This
patch is originally due to Christoph Hellwig, and by some reports
has been implementated before in 2.4-based trees by Andrea Arcangeli.
The memlist_* macros serve as nothing but an insulation layer from the
Linux-native generic list operations. This patch removes them in favor
of using generic list operations directly.
This comment, describing how to optimize for gcc-2.2.2, is so outdated
it should be removed. It's also quite doubtful it should ever have been
placed in this file at all (perhaps something under Documentation/ ?).
This patch removes it.
The comment describing the usage of zone_table[] assumes the existence
of an unsigned char page->zone field from the original implementation
of page->zone size reduction. This patch corrects the comment to
accurately describe the lookup mechanism used by page_zone() and also
to mention explicitly the sole user of the table, page_zone().
Kazuto Miyoshi [Mon, 3 Jun 2002 05:33:06 +0000 (22:33 -0700)]
[PATCH] fix for /proc operation:
I found that 'max' pointer is not updated in proc_dointvec_minmax()
and proc_doulongvec_minmax(), when I write smaller values than min to
/proc/sys entry (and val<*min++ check becomes true.)
This may lead to min/max checking of values with bogus maximum.
Johan Adolfsson [Mon, 3 Jun 2002 05:32:25 +0000 (22:32 -0700)]
[PATCH] Missing include in mm/bootmem.c
Missing include of asm_io.h in mm_bootmem.c:
Submitted this trivial patch on May 14, but nothing has happened yet.
Perhaps better chance if you took care of it.
It's needed by phys_to_virt() but it happens to work on i386 etc.
since dma.h includes io.h for that arch.
Trond Myklebust [Mon, 3 Jun 2002 05:12:03 +0000 (22:12 -0700)]
[PATCH] Fix Oops due to use of incorrect km_type in RPC socket code...
The following has been vetted with davem w.r.t. the change to
KM_SKB_DATA. Apologies for the bug...
include/asm-*/kmap_types.h:
Replace the unused km_type slot KM_SKB_DATA with
KM_SKB_SUNRPC_DATA.
net/sunrpc/xdr.c:
Replace the use of KM_USER0 with KM_SKB_SUNRPC_DATA for copying
data from an skb into the page cache when in the sk->data_ready()
callback.
oom-loop fixes error handling after a netlink failure - it does not do a
cleanup and it makes every next call to ip_fw_check to detect a
loop and drop the packet.