- 05 Nov, 2002 5 commits
-
-
Andrew Morton authored
If two CPUs run mod_timer against the same not-pending timer then they have no locking relationship. They can both see the timer as not-pending and they both add the timer to their cpu-local list. The CPU which gets there second corrupts the first CPU's lists. This was causing Dave Hansen's 8-way to oops after a couple of minutes of specweb testing. I believe that to fix this we need locking which is associated with the timer itself. The easy fix is hashed spinlocking based on the timer's address. The hard fix is a lock inside the timer itself. It is hard because init_timer() becomes compulsory, to initialise that spinlock. An unknown number of code paths in the kernel just wipe the timer to all-zeroes and start using it. I chose the hard way - it is cleaner and more idiomatic. The patch also adds a "magic number" to the timer so we can detect when a timer was not correctly initialised. A warning and stack backtrace is generated and the timer is fixed up. After 16 such warnings the warning mechanism shuts itself up until a reboot. It took six patches to my kernel to stop the warnings from coming out. The uninitialised timers are extremely easy to find and fix. But it will take some time to weed them all out. Maybe we should go for the hashed locking... Note that the new timer->lock means that we can clean up some awkward "oh we raced, let's try again" code in timer.c. But to do that we'd also need to take timer->lock in the commonly-called del_timer(), so I left it as-is. The lock is not needed in add_timer() because concurrent add_timer()/add_timer() and concurrent add_timer()/mod_timer() are illegal.
-
Andrew Morton authored
Final act, from Manfred: The attached patch removes 'event' entirely from the kernel: it's not used anymore. All event users [vfat dentry revalidation; ext2/3 inode generation; readdir() file position revalidation in several filesystems] were converted to local counters.
-
Andrew Morton authored
Patch from Manfred Spraul Several filesystems compare f_version and i_version to validate directory positions in readdir(): The directory position is revalidated if i_version is not equal f_version. Operations that could invalidate the cached position set i_version or f_version to '++event', event is a global variable. Global uniqueness is not needed, 'i_version++' and 'f_version=0' is sufficient to guarantee that the next readdir() will revalidate the directory position, and that avoids the need for an ugly global variable. The attached patch converts all filesystems except ext2, which was converted with a seperate patch.
-
Andrew Morton authored
Patch from Manfred Spraul Use a local counter instead of the global 'event' variable for the readdir() optimization. Depends on patch-event-II Background: The only user of i_version and f_version in ext2 is ext2_readdir(). As an optimization, ext2 performs the validation of the start position for readdir() only if flip->f_version != inode->i_version. If there was no llseek and no directory change since the last readdir() call, then f_pos can be trusted. f_version is set to 0 in get_empty_flip and during llseek. Right now, i_version set to ++event during ext2_read_inode and commit_chunk, i.e. at inode creation and if a directory is changed. Initializing i_version to 1, and updating with i_version++ achieves the same effect, without the need of a global variable. Global uniqueness is not required, there are no other uses of [if]_version in ext2. Change relative to the patch you have right now: i_version is initialized to 1 instead of 0. For ext2 it's doesn't matter [there is always a valid 'len' value at the beginning of a directory data block], but it's cleaner.
-
Andrew Morton authored
Patch from Manfred Spraul f_version and i_version are used by filesystems to check if it can reuse the f_pos position across readdir calls without validation. Right now f_version and i_version are modified by f_version = ++event; i_version = ++event; if (f_version != i_version) goto revalidate and event is a global, exported variable. But that's not needed, f_version = 0; i_version++; if (f_version != i_version) goto revalidate works too, without the ugly 'event' variable. I got an ok from viro, and I had notified the fs maintainers, no complaints either - block_dev.c, block_llseek updates f_version to '++event'. grep showed that no device driver uses f_version, this is dead code copied from the default llseek implementation. - the llseek implementations and get_empty_flip set f_version to '++event' This is not dead code, but filp->f_version = 0 achieves the same effect: f_version is used by the readdir() implementation of several filesystems to skip the revalidation of f_pos at the beginning of a readdir call: If llseek was not called and the filesystem did not change since the last readdir call, then the value in f_pos can be trusted. The implementation (for example in ext2) is inode->i_version = ++event; in all operations that change a directory At the beginning of file_operation->readdir(): if(inode->i_version != flip->f_version) revalidate(); filp->f_version = inode->i_version; There are other users of f_version, but none of them use the default llseek implementation (e.g. fs/pipe.c)
-
- 04 Nov, 2002 7 commits
-
-
Linus Torvalds authored
-
Dominik Brodowski authored
Both the /proc/sys/cpu/ and /proc/cpufreq interface can safely be enabled in the same kernel. This simplifies the transition to the newer interface. Only minor updates are needed in order to allow this to be done.
-
Linus Torvalds authored
-
David Howells authored
Fix: - Makefile using obj-m directly, rather than subsituting the "m" - compiler breakage against older versions of gcc - adds some lacking return statements that gcc didn't catch - removes some 2.4 compatibility stuff - RTT calculation - puts the timeouts in terms of HZ rather than assuming HZ==100
-
Matthew Wilcox authored
A supplement to manfred's patch; remove copy_segments, release_segments and even forget_segments from all architectures (except x86-64 since Andi wants to do that seperately):
-
David S. Miller authored
Did the changes that created this line actually build for anyone? :-)
-
Linus Torvalds authored
mbcache should be too.
-
- 03 Nov, 2002 28 commits
-
-
bk://are.twiddle.net/pci-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Richard Henderson authored
-
bk://are.twiddle.net/axp-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Richard Henderson authored
-
Richard Henderson authored
-
Richard Henderson authored
-
Matthew Dharm authored
This patch changes how media-change is detected to use a mechanism more similar to what 'popular' OSes use. The motive for this change is that more and more emulated-SCSI devices (sbp2, usb-storage, etc) don't support START_STOP unless they need it. Other OSes won't send a START_STOP unless the device reports NOT_READY, indicating that it needs an explicit command to start up. One could argue that these devices are out-of-spec, but they are so common that they basically define the de facto spec. Basically, any device that needs a START_STOP should still get it, but ones that don't need it won't.
-
Manfred Spraul authored
The i386 LDT code had it's own set of arch hooks (??_segments), I've replaced most of them with the mmu context hooks in a previous patch. The attached patch completes that change: replace release_segments with destroy_context. The patch is part of the -ac kernels in 2.4. The patch breaks x86-64, Andi Kleen promised to send you the corresponding s/release_segments/destroy_context/ patch.
-
Sam Ravnborg authored
Cleaning simplified by descending down in aicasm when cleaning. Fixed firmware build, someone made a spelling mistakei (aix -> aic). No longer include Rules.make.
-
Sam Ravnborg authored
Made the *docs targets work after the restructuring of the kbuild files. Fix cleaning up after make htmldocs, there are some directories that needs to be deleted in that case.
-
Dominik Brodowski authored
This patch updates the p4-clockmod.c driver to correctly manage HyperThreading-enabled Pentium IVs as well as those models which do not support HyperThreading - thanks to Venkatesh Pallipadi for explaining cpu_sibling_map to me. Additionally, an EXPORT_SYMBOL was missing. (spotted by Marc-Christian Petersen - thanks!)
-
Linus Torvalds authored
-
Matthew Wilcox authored
Update to the latest parport_gsc in the PA tree.
-
Matthew Wilcox authored
Some misc updates: - adapt our config.in changes to arch/parisc/Kconfig - general Makefile updaes for the new build system - remove asm-parisc/gsc.h in favour of asm-parisc/io.h - Alan-approved fix for the loff_t problem - Define POLLREMOVE like other architectures. - irq handling updates from Grant Grundler
-
Matthew Wilcox authored
x86 doesn't evaluate the argument to flush_dcache_page so this compilation problem has gone overlooked:
-
Matthew Wilcox authored
SOM is the file format used for HPUX binaries.
-
Matthew Wilcox authored
This huge patch moves a bunch of drivers from arch/parisc/kernel to drivers/parisc and adds some new drivers in drivers/parisc.
-
Matthew Wilcox authored
Some might argue that HPUX already has quite enough of a personality.
-
Matthew Wilcox authored
Build fixes, PA64 fixes, some new hpux syscalls, VFS fixes.
-
Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Geert Uytterhoeven authored
M68k: Remove obsolete cruft
-
Geert Uytterhoeven authored
Add Sun-3 DVMA debugging code (currently disabled, from Sam Creasey)
-
Geert Uytterhoeven authored
Zorro: trivial patch to use loff_t and not int (from Silvio Cesare <silvio@qualys.com>)
-
Geert Uytterhoeven authored
Add Sun-3 VME support (by Sam Creasey): - Added VME version of the Sun-3 NCR5380 scsi driver. - Modified the Sun-3 dvma routines to support VME. - Added sun3_map_test() -- uses the ex_table to trap faults on VME mappings in order to determine if a card is present. This seems a little hackish to be, but: 1) All changes are entirely within Sun3-only code paths, 2) netbsd, sunos, and mach all use this mechanism for VME probes anyway.
-
Geert Uytterhoeven authored
Update m68k for the change of xtime from struct timeval to struct timespec, which has a higher resolution (ns vs. us), in 2.5.35.
-
Geert Uytterhoeven authored
Fix rwsemtrace() message
-
Geert Uytterhoeven authored
Add ElBox Computer FastATA 1200/4000/ZIV to the Zorro ID database (from zorroutils)
-
Geert Uytterhoeven authored
General cleanup/updating of purely sun3/3x code (from Sam Creasey) - arch/m68k/sun3(x): o Cleaned up prom code slightly o Added reporting of prom revision in /proc/hardware o Removed some warnings - Use common idprom code for both Sun-3 and Sun-3x - Sun-3x idprom updates - drivers/scsi/sun3*: updated scsi drivers to reflect new struct scatterlist.
-