Jeff Dike [Tue, 24 Aug 2004 04:19:22 +0000 (21:19 -0700)]
[PATCH] Make UML build and run
This patch includes the following -
updated defconfig
move uml.lds.S and main.c from arch/um to arch/um/kernel per Sam's suggestions
steal bitops.c from arch/i386
convert all calls to open_private_file to dentry_open
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Jeff Dike [Tue, 24 Aug 2004 04:18:53 +0000 (21:18 -0700)]
[PATCH] UML fixes
The patch below fixes a few UML-specific bugs not related to the rest of the
kernel
a bogus error return and some formatting in the fork code
correct calculation of task.thread.kernel_stack
remove a bogus panic
a couple of fixes to allow UML to boot in the presence of exec-shield
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Jeff Dike [Tue, 24 Aug 2004 04:18:42 +0000 (21:18 -0700)]
[PATCH] UML updates
The patch below brings UML up to date with interface changes and the like
irq.c includes profile.h to bring in a missing definition
use the cpu_{set,clear} interface
use the new get_signal_to_deliver interface
define instruction_pointer
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Fix os_process_pc and os_process_parent for corner cases.
Update os_process_pc and os_process_parent: now a PID can be > 32768 (so
increase number of digits) and make it work even with spaces in the command
name.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Make malloc() call vmalloc if needed. Needed for hostfs on 2.6 host.
From: Oleg Drokin <green@linuxhacker.ru>, Jeff Dike <jdike@addtoit.com>, and
me
If size > 128K, with this patch malloc will call vmalloc; free will detect
whether to call vfree or kfree or __real_free(). The 2.4 version could forget
free()ing something; this has been fixed.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
That code comes from the out_of_memory section; in 2.4 it was correct to put
it for "default:", since it was called when handle_mm_fault() return value was
!= 0, 1, 2, i.e. it was 3, OOM (but the i386 code put it out of line, for
better performance). Here, instead, the OOM case is handled on its own, so if
handle_mm_fault() != from the listed cases we must BUG().
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
SKAS mode is like 4G/4G (here we have actually 3G/3G) for guest processes, so
when checking for kernel stack overflow, we must first make sure we are
checking a kernel-space address. Also, correctly test for stack overflows
(i.e. check if there is less than 1k of stack left; see
arch/i386/kernel/irq.c:do_IRQ()). And also, THREAD_SIZE != PAGE_SIZE * 2, in
general (though this setting is almost never changed, so we didn't notice
this1). Thanks to the good eye of Alex Züpke <azu@sysgo.de> for first seeing
this bug, and providing a test program:
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Handles correctly errno == EINTR in lots of places.
On various places (mostly waitpid() calls) this patch makes sure that if errno
== EINTR on return, then the syscall is endlessly retried. It also defines a
simple generic way to do this.
Signed-off-by: <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
- Correct some silly errors (dereferencing a pointer before checking if it's
!= NULL when creating /proc/sysemu, some error messages)
- separate using_sysemu from sysemu_supported (so to refuse to activate
sysemu if it is not supported, avoiding panics)
- not probe sysemu if in tt mode.
Signed-off-by: <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Adds /proc/sysemu to toggle SYSEMU usage.
Adds /proc/sysemu to toggle SYSEMU usage.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Adds the "nosysemu" command line parameter to disable SYSEMU
Adds the "nosysemu" command line parameter to disable SYSEMU
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Use PTRACE_SCEMU (the so-called SYSEMU) to reduce syscall cost.
Turns off syscall emulation patch for ptrace (SYSEMU) on. SYSEMU is a
performance-patch introduced by Laurent Vivier. It changes behaviour of
ptrace() and helps reducing host context switch rate. To make it working, you
need a kernel patch for your host, too. See
http://perso.wanadoo.fr/laurent.vivier/UML/ for further information.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Folds hostaudio_user.c into hostaudio_kern.c.
Folds hostaudio_user.c into hostaudio_kern.c. A lot of code less. Also note
that I no more update ppos(as I used to do in the 2.4 patch): I checked that
OSS never changes ppos, so hostaudio did the right thing.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Fixes raw() and uses it in check_one_sigio; also fixes a silly panic (EINTR returned by call).
Fixes raw() and uses it in check_one_sigio; also fixes a silly panic (EINTR
returned by call).
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Reduces code in *_user files, by moving it in _kern files if already possible.
Reduces code in *_user files, by moving it in _kern files if already possible.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Avoids compile failure when host misses tkill().
Avoids compile failure when host misses tkill(), by simply using kill() in
that case.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Fixes some little warnings about "Defined but not used ..." by #ifdef'ing
things
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Fixes "fixdep.c" to support arch/um/include/uml-config.h.
You probably saw that if you change one config option, even if
linux/autoconf.h (which is included by everything) changes, the kernel is
smart enough not to recompile everything. But with UML this no more holds.
Why? Because, as you see in this patch, fixdep avoids making anything depend
onto linux/autoconf.h *explicitly*, but nobody taught him to do the same for
arch/um/include/uml-config.h. So apply this patch. Do not say "I don't want
to change the generic Kbuild for one arch": this cannot hurt. It's a bugfix
for us, a no-op for others.
Note: with this patch, fixdep will still add a dependency from a file
containing UML_CONFIG_BYE onto CONFIG_BYE. Since someone could think that
fixdep should grep for [^A-Z_]CONFIG_ rather than simply for CONFIG_, I've
added a comment that ask *not to fix* this "bug".
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
The second adds the LEGACY_PTY config option. Without it, with late 2.6 kernels
/dev/ptyxx won't work. In fact, with those kernels, root_fs_toms does not
work, because it's "unable to allocate TTY pair". And removes the dead option
"UNIX98_PTY_COUNT" (just commented out for now).
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Fixes an host fd leak caused by hostfs.
In detail, on 2.4 we used force_delete() to make sure inode were not cached,
and we then close the host file when the inode is cleared; when porting to 2.6
the "force_delete" thing was dropped, and this patch adds a fix for this (by
setting drop_inode = generic_delete_inode). Search for drop_inode in the 2.6
Documentation/filesystems/vfs.txt for info about this.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Avoid that gcc breaks UML with "unit at a time" compilation mode.
Avoid that gcc breaks UML with "unit at a time" compilation mode.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] uml: Readds (just for now) ghash.h for UML
Just for now and just for UML; it will go away.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Jeff Dike [Tue, 24 Aug 2004 04:13:46 +0000 (21:13 -0700)]
[PATCH] UML updates
The patch below brings UML up to date with some changes in the rest of the
kernel:
an updated defconfig
checksum.h includes in6.h to get a definition of in6_addr
added a missing cpu_{set,clear} change
removed include/asm-um/module.h since it's really a link
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
The main part of UML; it is the last distributed patch for 2.6.7 Removes skas
support from the main UML patch; apply or get conflicts.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> Cc: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Arjan van de Ven [Tue, 24 Aug 2004 04:12:26 +0000 (21:12 -0700)]
[PATCH] flex mmap for s390(x)
Below is a patch from Pete Zaitcev (zaitcev@redhat.com) to also use the
flex mmap infrastructure for s390(x). The IBM Domino guys *really* seem to
want this.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Arjan van de Ven [Tue, 24 Aug 2004 04:12:13 +0000 (21:12 -0700)]
[PATCH] sysctl tunable for flexmmap
Create /proc/sys/vm/legacy_va_layout. If this is non-zero, the kernel
will use the old mmap layout for all tasks. it presently defaults to zero
(the new layout).
Arjan van de Ven [Tue, 24 Aug 2004 04:12:01 +0000 (21:12 -0700)]
[PATCH] flexmmap patchkit: fix for 32 bit emu for 64 bit arches
Utz Lehmann <u.lehmann@de.tecosim.com> found a problem with the flexmmap
patches on x86-64, what he is seeing is that the 32 bit personality isn't
set at the first point of setting the allocator strategy. The solution is
simple, in binfmt_elf the personality is set so put the pick-layout
function there. Please consider,
Signed-off-by: Arjan van de Ven <arjanv@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Ingo Molnar [Tue, 24 Aug 2004 04:11:50 +0000 (21:11 -0700)]
[PATCH] i386 virtual memory layout rework
Rework the i386 mm layout to allow applications to allocate more virtual
memory, and larger contiguous chunks.
- the patch is compatible with existing architectures that either make
use of HAVE_ARCH_UNMAPPED_AREA or use the default mmap() allocator - there
is no change in behavior.
- 64-bit architectures can use the same mechanism to clean up 32-bit
compatibility layouts: by defining HAVE_ARCH_PICK_MMAP_LAYOUT and
providing a arch_pick_mmap_layout() function - which can then decide
between various mmap() layout functions.
- I also introduced a new personality bit (ADDR_COMPAT_LAYOUT) to signal
older binaries that dont have PT_GNU_STACK. x86 uses this to revert back
to the stock layout. I also changed x86 to not clear the personality bits
upon exec(), like x86-64 already does.
- once every architecture that uses HAVE_ARCH_UNMAPPED_AREA has defined
its arch_pick_mmap_layout() function, we can get rid of
HAVE_ARCH_UNMAPPED_AREA altogether, as a final cleanup.
the new layout generation function (__get_unmapped_area()) got significant
testing in FC1/2, so i'm pretty confident it's robust.
Compiles & boots fine on an 'old' and on a 'new' x86 distro as well.
The two known breakages were:
http://www.redhatconfig.com/msg/67248.html
[ 'cyzload' third-party utility broke. ]
http://www.zipworld.com/au/~akpm/dde.tar.gz
[ your editor broke :-) ]
both were caused by application bugs that did:
int ret = malloc();
if (ret <= 0)
failure;
such bugs are easy to spot if they happen, and if it happens it's possible
to work it around immediately without having to change the binary, via the
setarch patch.
No other application has been found to be affected, and this particular
change got pretty wide coverage already over RHEL3 and exec-shield, it's in
use for more than a year.
The setarch utility can be used to trigger the compatibility layout on
x86, the following version has been patched to take the `-L' option:
"setarch -L i386 <command>" will run the command with the old layout.
From: Hugh Dickins <hugh@veritas.com>
The problem is in the flexible mmap patch: arch_get_unmapped_area_topdown
is liable to give your mmap vm_start above TASK_SIZE with vm_end wrapped;
which is confusing, and ends up as that BUG_ON(mm->map_count).
The patch below stops that behaviour, but it's not the full solution:
wilson_mmap_test -s 1000 then simply cannot allocate memory for the large
mmap, whereas it works fine non-top-down.
I think it's wrong to interpret a large or rlim_infinite stack rlimit as
an inviolable request to reserve that much for the stack: it makes much less
VM available than bottom up, not what was intended. Perhaps top down should
go bottom up (instead of belly up) when it fails - but I'd probably better
leave that to Ingo.
Or perhaps the default should place stack below text (as WLI suggested and
ELF intended, with its text defaulting to 0x08048000, small progs sharing
page table between stack and text and data); with a further personality for
those needing bigger stack.
From: Ingo Molnar <mingo@elte.hu>
- fall back to the bottom-up layout if the stack can grow unlimited (if
the stack ulimit has been set to RLIM_INFINITY)
- try the bottom-up allocator if the top-down allocator fails - this can
utilize the hole between the true bottom of the stack and its ulimit, as a
last-resort effort.
Ingo Molnar [Tue, 24 Aug 2004 04:11:37 +0000 (21:11 -0700)]
[PATCH] sched: smt fixes
while looking at HT scheduler bugreports and boot failures i discovered a
bad assumption in most of the HT scheduling code: that resched_task() can
be called without holding the task's runqueue.
This is most definitely not valid - doing it without locking can lead to
the task on that CPU exiting, and this CPU corrupting the (ex-) task_info
struct. It can also lead to HT-wakeup races with task switching on that
other CPU. (this_CPU marking the wrong task on that_CPU as need_resched -
resulting in e.g. idle wakeups not working.)
The attached patch against fixes it all up. Changes:
- resched_task() needs to touch the task so the runqueue lock of that CPU
must be held: resched_task() now enforces this rule.
- wake_priority_sleeper() was called without holding the runqueue lock.
- wake_sleeping_dependent() needs to hold the runqueue locks of all
siblings (2 typically). Effects of this ripples back to schedule() as
well - in the non-SMT case it gets compiled out so it's fine.
- dependent_sleeper() needs the runqueue locks too - and it's slightly
harder because it wants to know the 'next task' info which might change
during the lock-drop/reacquire. Ripple effect on schedule() => compiled
out on non-SMT so fine.
- resched_task() was disabling preemption for no good reason - all paths
that called this function had either a spinlock held or irqs disabled.
Compiled & booted on x86 SMP and UP, with and without SMT. Booted the
SMT kernel on a real SMP+HT box as well. (Unpatched kernel wouldn't even
boot with the resched_task() assert in place.)
Ingo Molnar [Tue, 24 Aug 2004 04:11:26 +0000 (21:11 -0700)]
[PATCH] sched: self-reaping atomicity fix
disable preemption in the self-reap codepath, as such tasks may not be on
the tasklist anymore and CPU-hotplug relies on the tasklist to migrate
tasks.
Ingo Molnar [Tue, 24 Aug 2004 04:10:51 +0000 (21:10 -0700)]
[PATCH] sched: nonlinear timeslices
* Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> Increasing priority (negative nice) doesn't have much impact. -20 CPU
> hog only gets about double the CPU of a 0 priority CPU hog and only
> about 120% the CPU time of a nice -10 hog.
this is a property of the base scheduler as well.
We can do a nonlinear timeslice distribution trivially - the attached
patch implements the following timeslice distribution ontop of
2.6.8-rc3-mm1:
[ -20 ... 0 ... 19 ] => [800ms ... 100ms ... 5ms]
the nice-20/nice+19 ratio is now 1:160 - sufficient for all aspects.
Rick Lindsley [Tue, 24 Aug 2004 04:09:41 +0000 (21:09 -0700)]
[PATCH] scheduler statistics
It adds lots of CPU scheduler stats in /proc/pid/stat. They are described in
the new Documentation//sched-stats.txt
We were carrying this patch offline for some time, but as there's still
considerable ongoing work in this area, and as the new stats are a
configuration option, I think it's best that this capability be in the base
kernel.
Nick removed a fair amount of statistics that he wasn't using. The full patch
gathers more information. In particular, his patch doesn't include the code
to measure the latency between the time a process is made runnable and the
time it hits a processor which will be key to measuring interactivity changes.
He passed his changes back to me and I got finished merging his changes with
the current statistics patches just before OLS. I believe this is largely a
superset of the patch you grabbed and should port relatively easily too.
Versions also exist for
2.6.8-rc2
2.6.8-rc2-mm1
2.6.8-rc2-mm2
at
http://eaglet.rain.com/rick/linux/schedstat/patches/
- moved the new /proc/<PID>/stat fields to /proc/<PID>/schedstat,
because the new fields break older procps. It's cleaner this way
anyway. This moving of fields necessiated a bump to version 10.
Documentation/sched-stats.txt:
- updated sched-stats.txt for version 10
- wake_up_forked_thread() => wake_up_new_task()
- updated the per-process field description
Kconfig:
- removed the default y and made the option dependent on DEBUG_KERNEL.
This is really for scheduler analysis, normal users dont need the
overhead.
include/linux/sched.h:
- moved the definitions into kernel/sched.c - this fixes UP compilation
and is cleaner.
- also moved the sched-domain definitions to sched.c - now that the
sched-domains internals are not exposed to architectures this is
doable. It's also necessary due to the previous change.
kernel/fork.c:
- moved the ->sched_info init to sched_fork() where it belongs.
Con Kolivas [Tue, 24 Aug 2004 04:09:28 +0000 (21:09 -0700)]
[PATCH] sched: adjust p4 per-cpu gain
The smt-nice handling is a little too aggressive by not estimating the per cpu
gain as high enough for pentium4 hyperthread. This patch changes the per
sibling cpu gain from 15% to 25%. The true per cpu gain is entirely dependant
on the workload but overall the 2 species of Pentium4 that support
hyperthreading have about 20-30% gain.
P.S: Anton - For the power processors that are now using this SMT nice
infrastructure it would be worth setting this value separately at 40%.
Signed-off-by: Con Kolivas <kernel@kolivas.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Matthew Dobson [Tue, 24 Aug 2004 04:09:16 +0000 (21:09 -0700)]
[PATCH] Create cpu_sibling_map for PPC64
In light of some proposed changes in the sched_domains code, I coded up
this little ditty that simply creates and populates a cpu_sibling_map for
PPC64 machines. The patch just checks the CPU flags to determine if the
CPU supports SMT (aka Hyper-Threading aka Multi-Threading aka ...) and
fills in a mask of the siblings for each CPU in the system. This should
allow us to build sched_domains for PPC64 with generic code in
kernel/sched.c for the SMT systems. SMT is becoming more popular and is
turning up in more and more architectures. I don't think it will be too
long until this feature is supported by most arches...
Signed-off-by: Matthew Dobson <colpatch@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dimitri Sivanich [Tue, 24 Aug 2004 04:09:04 +0000 (21:09 -0700)]
[PATCH] sched: isolated sched domains
Here's a version of the isolated scheduler domain code that I mentioned in
an RFC on 7/22. This patch applies on top of 2.6.8-rc2-mm1 (to include all
of the new arch_init_sched_domain code). This patch also contains the 2
line fix to remove the check of first_cpu(sd->groups->cpumask)) that Jesse
sent in earlier.
Note that this has not been tested with CONFIG_SCHED_SMT. I hope that my
handling of those instances is OK.
Jesse Barnes [Tue, 24 Aug 2004 04:08:53 +0000 (21:08 -0700)]
[PATCH] sched: limit cpuspan of node scheduler domains
This patch limits the cpu span of each node's scheduler domain to prevent
balancing across too many cpus. The cpus included in a node's domain are
determined by the SD_NODES_PER_DOMAIN define and the arch specific
sched_domain_node_span routine if ARCH_HAS_SCHED_DOMAIN is defined. If
ARCH_HAS_SCHED_DOMAIN is not defined, behavior is unchanged--all possible
cpus will be included in each node's scheduling domain. Currently, only
ia64 provides an arch specific sched_domain_node_span routine.
From: Jesse Barnes <jbarnes@engr.sgi.com>
This patch adds some more NUMA specific logic to the creation of scheduler
domains. Domains spanning all CPUs in a large system are too large to
schedule across efficiently, leading to livelocks and inordinate amounts of
time being spent in scheduler routines. With this patch applied, the node
scheduling domains for NUMA platforms will only contain a specified number
of nearby CPUs, based on the value of SD_NODES_PER_DOMAIN. It also allows
arches to override SD_NODE_INIT, which sets the domain scheduling parameters
for each node's domain. This is necessary especially for large systems.
Possible future directions:
o multilevel node hierarchy (e.g. node domains could contain 4 nodes
worth of CPUs, supernode domains could contain 32 nodes worth, etc. each
with their own SD_NODE_INIT values)
o more tweaking of SD_NODE_INIT values for good load balancing vs.
overhead tradeoffs
Nick Piggin [Tue, 24 Aug 2004 04:08:41 +0000 (21:08 -0700)]
[PATCH] sched: consolidate sched domains
Teach the generic domains builder about SMT, and consolidate all
architecture specific domain code into that. Also, the SD_*_INIT macros can
now be redefined by arch code without duplicating the entire setup code.
This can be done by defining ARCH_HASH_SCHED_TUNE.
The generic builder has been simplified with the addition of a helper
macro which will probably prove to be useful to arch specific code as well
and should be exported if that is the case.
Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au>
From: Matthew Dobson <colpatch@us.ibm.com>
The attached patch is against 2.6.8-rc2-mm2, and removes Nick's
conditional definition & population of cpu_sibling_map[] in favor of my
unconditional ones. This does not affect how cpu_sibling_map is used, just
gives it broader scope.
From: Nick Piggin <nickpiggin@yahoo.com.au>
Small fix to sched-consolidate-domains.patch picked up by
From: Suresh <suresh.b.siddha@intel.com>
another sched consolidate domains fix
From: Nick Piggin <nickpiggin@yahoo.com.au>
Don't use cpu_sibling_map if !CONFIG_SCHED_SMT
This one spotted by Dimitri Sivanich <sivanich@sgi.com>
Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Nick Piggin [Tue, 24 Aug 2004 04:08:17 +0000 (21:08 -0700)]
[PATCH] sched: remove balance on clone
This removes balance on clone capability altogether. I told Andi we wouldn't
remove it yet, but provided it is in a single small patch, he mightn't get too
upset.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Nick Piggin [Tue, 24 Aug 2004 04:08:06 +0000 (21:08 -0700)]
[PATCH] sched: disable balance on clone
Don't balance on clone by default.
Balance on clone has a number of trivial performance failure cases, but it was
needed to get decent OpenMP performance on NUMA (Opteron) systems. Not doing
child-runs-first for new threads also solves this problem in a nicer way
(implemented in a previous patch).
Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Nick Piggin [Tue, 24 Aug 2004 04:07:19 +0000 (21:07 -0700)]
[PATCH] kernel thread idle fix
Now that init_idle does not remove tasks from the runqueue, those
architectures that use kernel_thread instead of copy_process for the idle
task will break. To fix, ensure that CLONE_IDLETASK tasks are not put on
the runqueue in the first place.
Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Move balancing and child-runs-first logic from fork.c into sched.c where
it belongs.
* Consolidate wake_up_forked_process and wake_up_forked_thread into
wake_up_new_process, and pass in clone_flags as suggested by Linus. This
removes a lot of code duplication and allows all logic to be handled in that
function.
* Don't do balance-on-clone balancing for vfork'ed threads.
* Don't do set_task_cpu or balance one clone in wake_up_new_process.
Instead do it in sched_fork to fix set_cpus_allowed races.
* Don't do child-runs-first for CLONE_VM processes, as there is obviously no
COW benifit to be had. This is a big one, it enables Andi's workload to run
well without clone balancing, because the OpenMP child threads can get
balanced off to other nodes *before* they start running and allocating
memory.
* Rename sched_balance_exec to sched_exec: hide the policy from the API.
From: Ingo Molnar <mingo@elte.hu>
rename wake_up_new_process -> wake_up_new_task.
in sched.c we are gradually moving away from the overloaded 'process' or
'thread' notion to the traditional task (or context) naming.
Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Ingo Molnar [Tue, 24 Aug 2004 04:06:43 +0000 (21:06 -0700)]
[PATCH] sched: fix timeslice calculations for HZ=1000.
The main benefit is that with the default HZ=1000 nice +19 tasks now get 5
msecs of timeslices, so the ratio of CPU use is linear. (nice 0 task gets
20 times more CPU time than a nice 19 task. Prior this change the ratio
was 1:10)
another effect is that nice 0 tasks now get a round 100 msecs of timeslices
(as intended), instead of 102 msecs.
here's a table of old/new timeslice values, for HZ=1000 and 100:
Paul Mackerras [Mon, 23 Aug 2004 16:39:00 +0000 (09:39 -0700)]
[PATCH] ppc64: use struct list_head for hose_list
This patch changes hose_list from a simple linked list to a
"list.h"-style list. This is in preparation for the runtime
addition/removal of PCI Host Bridges.
Signed-off-by: John Rose <johnrose@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Nathan Fontenot [Mon, 23 Aug 2004 16:38:48 +0000 (09:38 -0700)]
[PATCH] ppc64: fix enable_surveillance() for power5
On some platforms (notably power5) you can't enable surveillance
(firmware/service processor watchdog) from the kernel - you have to do
it in the firmware.
This patch changes enable_surveillance() to make the message that is
printed in this situation more informative. Additionaly, the rtas_call
was changed to rtas_set_indicator so as to avoid having to handle
RTAS_BUSY returns.
Linus Torvalds [Mon, 23 Aug 2004 14:13:03 +0000 (07:13 -0700)]
Use F_SETLK instead of F_SETLK64 in nfs locking code.
The code doesn't actually _care_ about 32/64-bit issues,
only about F_SETLK vs F_SETLKW, and the F_SETLK64 doesn't
exist except as a compatibility thing on 64-bit architectures
(since the regular one already _is_ 64-bit, of course).
Trond Myklebust [Mon, 23 Aug 2004 16:02:36 +0000 (12:02 -0400)]
RPC,NFSv4: NFSv4 operations that create or destroy state on the
server are not allowed to be interrupted as that may result in the
client and server disagreeing.
Trond Myklebust [Mon, 23 Aug 2004 15:21:20 +0000 (11:21 -0400)]
NFSv2/v3/v4: Make the rpc_ops->getattr method take a filehandle
rather than an inode argument. Fix up nfs_instantiate() and
_nfs4_do_open to use this since doing a new lookup might be racy.
Trond Myklebust [Mon, 23 Aug 2004 15:19:03 +0000 (11:19 -0400)]
NFSv2/v3/v4: Place NFS nfs_page shared data into a single structure
that hangs off filp->private_data. As a side effect, this also
cleans up the NFSv4 private file state info.
Trond Myklebust [Mon, 23 Aug 2004 14:18:16 +0000 (10:18 -0400)]
NFSv2: In the NFSv3 RFC, the sattr3 structure passed in the SETATTR
call allows for the client to request that the mtime and/or atime
of an inode be set to the current server time, the given (client)
time, or not changed. The set-to-current-server value is used
when you run "touch file" on the client.
The NFSv2 RFC defines no such encoding for the sattr structure.
However Solaris and Irix machine obey a convention where passing
the invalid value mtime.useconds=1000000 means "set both mtime and
atime to the current server time". The convention is documented
in the book "NFS Illustrated" by Brent Callaghan. The patch below
implements this convention for the Linux client and server (hence
multiple To:s).
Trond Myklebust [Mon, 23 Aug 2004 14:17:20 +0000 (10:17 -0400)]
KCONFIG: In the kernel help for NFSv3 & NFSv4 client support both are
listed as "the newer version ... of the NFS protocol". Obviously
both can't be the newer version at the same time, so here's a
patch to correct the text in such a way that only v4 is listed as
the newer version. Patch is against 2.6.7-rc3 - please consider
including it.
Trond Myklebust [Mon, 23 Aug 2004 14:16:26 +0000 (10:16 -0400)]
NFS: Now that file handle comparison ignores the unused parts of the
file handle container, there is no longer any need to clear the
file handle container before copying in a file handle. This
allows us to remove a 128 byte memset() from several hot paths.
Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Trond Myklebust [Mon, 23 Aug 2004 14:15:49 +0000 (10:15 -0400)]
NFS: While the storage container for NFS file handles must be able to
store 128 bytes, usually NFS servers don't use file handles that
are more than 32 bytes in size. This patch creates an efficient
mechanism for comparing file handles that ignores the unused bytes
in a file handle.
Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Trond Myklebust [Mon, 23 Aug 2004 14:15:13 +0000 (10:15 -0400)]
NFS: In 2.4, NFS O_DIRECT used the VFS's O_DIRECT logic to provide
direct I/O support for NFS files. The 2.4 VFS O_DIRECT logic was
block based, thus the NFS client had to provide a minimum
allowable blocksize for O_DIRECT reads and writes on NFS files.
For various reasons we chose 512 bytes. In 2.6, there is no
requirement for a minimum blocksize. NFS O_DIRECT reads and
writes can go to any byte at any offset in a file. Thus we revert
the blocksize setting for NFS file systems to the previous
behavior, which was to advertise the "wsize" setting as the
optimal I/O block size. This improves the performance of
applications like 'cp' which use this value as their transfer
size.
This patch also exposes the server's reported disk block size in the
f_frsize of the vfsstat structure.
Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Trond Myklebust [Mon, 23 Aug 2004 14:13:19 +0000 (10:13 -0400)]
NFS: Break the nfs_wreq_lock into per-mount locks. This helps prevent
a heavy read and write workload on one mount point from
interfering with workloads on other mount points.
Note that there is still some serialization due to the big kernel
lock.
Signed-off-by: Chuck Lever <cel@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Trond Myklebust [Mon, 23 Aug 2004 14:12:24 +0000 (10:12 -0400)]
RPCSEC_GSS: Add the spkm3 common and client-side code.
Signed-off-by: Andy Adamson <andros@citi.umich.edu> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no>