1. 23 Aug, 2004 14 commits
    • Paul Mackerras's avatar
      [PATCH] ppc32: Fix bug in altivec emulation · a2679264
      Paul Mackerras authored
      This patch fixes a bug in the kernel emulation of altivec instructions with
      denormalized operands.  The emulation of the vmaddfp and vmnsubfp
      instructions was giving the wrong answer because I had the wrong order of
      operands to the fmadds and fnmsubs instructions.  This patch fixes it for
      both ppc32 and ppc64.
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      a2679264
    • Eugene Surovegin's avatar
      [PATCH] ppc32: export __dma_sync & __dma_sync_page · de5cdff5
      Eugene Surovegin authored
      This patch adds missing exports for __dma_sync and __dma_sync_page (DMA API
      helpers for non-coherent cache PPCs).
      Signed-off-by: default avatarEugene Surovegin <ebs@ebshome.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      de5cdff5
    • Matt Porter's avatar
      [PATCH] ppc32: add docs for noltlbs and nobats parameters · 934b8f1a
      Matt Porter authored
      Adds documentation of the PPC noltlbs and nobats kernel cmdline parameters.
      noltlbs is a new option and nobats never had an entry.
      Signed-off-by: default avatarMatt Porter <mporter@kernel.crashing.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      934b8f1a
    • Paul Mackerras's avatar
      [PATCH] ppc32: emulate obsolete instructions · 79e2e096
      Paul Mackerras authored
      This patch adds emulation in the illegal instruction handler for a couple
      of old instructions that are no longer implemented in the PPC970 and later
      chips.  This patch adds the code for both ppc32 and ppc64, and cleans up
      the ppc64 traps.c a bit, along the lines of the ppc32 code.  It also makes
      sure that the ppc64 code generates a SIGTRAP after emulating an instruction
      if single-stepping is enabled.
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      79e2e096
    • Paul Mackerras's avatar
      [PATCH] ppc32: handle misaligned string/multiple insns · 1862e9f2
      Paul Mackerras authored
      This patch adds code to the ppc32 alignment exception handler to make it
      handle the load/store string and load/store multiple word instructions. 
      This is an issue for older CPUs such as the PPC601, which traps on
      load/store string instructions which cross a page boundary (newer CPUs
      handle this in hardware).  I have a little test program which exercises
      this code, so I am reasonably confident it's correct.
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      1862e9f2
    • Matt Porter's avatar
      [PATCH] ppc32: make PPC40x large tlb mapping optional · bc3152e4
      Matt Porter authored
      This makes the PPC40x lowmem large tlb mapping selectable via a cmdline
      option.  This allows use of the normal page-sized mapping so that kernel
      text can be read only if desired.
      Signed-off-by: default avatarJosh Boyer <jwboyer@charter.net>
      Signed-off-by: default avatarMatt Porter <mporter@kernel.crashing.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      bc3152e4
    • Matt Porter's avatar
      [PATCH] ppc32: optimize/fix timer_interrupt loop · 07a134d6
      Matt Porter authored
      The following patch fixes the situation where the loop condition could
      generate a next_dec of zero while exiting the loop.  This is suboptimal on
      Classic PPC because it forces another interrupt to occur and reenter the
      handler.  It is fatal on Book E cores, because their decrementer is stopped
      when writing a zero (Classic interrupts on a 0->-1 transition, Book E
      interrupts on a 1->0 transition).  Instead, stay in the loop on a
      next_dec==0.
      Signed-off-by: default avatarMatt Porter <mporter@kernel.crashing.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      07a134d6
    • Benjamin Herrenschmidt's avatar
      [PATCH] ppc32: remove hardcoded offsets from ppc asm · d6e3c04a
      Benjamin Herrenschmidt authored
      This patch by Vincent Hanquez removes some hard coded offsets for accessing
      thread info fields from assembly, uses the normal offset generation
      mecanism that we already have for other things instead.
      Signed-off-by: default avatarVincent Hanquez <tab@snarc.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      d6e3c04a
    • Keith Owens's avatar
      [PATCH] Make i386 die() more resilient against recursive errors · 2fa69d93
      Keith Owens authored
      Make i386 die() more resilient against recursive errors, almost a cut
      and paste of the ia64 die() routine.  Much of the patch is indentation
      changes.
      
      Mainly to make it easier to add crash, lcrash, kmsgdump or other RAS patches. 
      They are invoked from die() and if they crash themselves, we have to avoid
      recursive loops in die().
      Signed-off-by: default avatarKeith Owens <kaos@sgi.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      2fa69d93
    • Akiyama Nobuyuki's avatar
      [PATCH] NMI trigger switch support for debugging(updated) · 7f2b65bd
      Akiyama Nobuyuki authored
      I made a patch for debugging with the help of NMI trigger switch.
      When kernel hangs severely, keyboard operation(e.g.Ctrl-Alt-Del)
      doesn't work properly. This patch enables debugging information
      to be displayed on console in this case.
      I think this feature is necessary as standard functionality.
      Please feel free to use this patch and let me know if you have
      any comments.
      
      Background:
      
      When a trouble occurs in kernel, we usually begin to investigate
      with following information:
       - panic >> panic message.
       - oops >> CPU registers and stack trace.
       - hang >> **NONE** no standard method established.
      
      How it works:
      
      Most IA32 servers have a NMI switch that fires NMI interrupt up.
      The NMI interrupt can interrupt even if kernel is serious state,
      for example deadlock under the interrupt disabled.
      When the NMI switch is pressed after this feature is activated,
      CPU registers and stack trace are displayed on console and then
      panic occurs.
      This feature is activated or deactivated with sysctl.
      
      On IA32 architecture, only the following are defined as reason
      of NMI interrupt:
       - memory parity error
       - I/O check error
      The reason code of NMI switch is not defined, so this patch assumes
      that all undefined NMI interrupts are fired by MNI switch.
      However, oprofile and NMI watchdog also use undefined NMI interrupt.
      Therefore this feature cannot be used at the same time with oprofile
      and NMI watchdog. This feature hands NMI interrupt over to oprofile
      and NMI watchdog. So, when they have been activated, this feature
      doesn't work even if it is activated.
      
      Supported architecture:
      
      IA32
      
      Setup:
      
      Set up the system control parameter as follows:
      
      # sysctl -w kernel.unknown_nmi_panic=1
      kernel.unknown_nmi_panic = 1
      
      If the NMI switch is pressed, CPU registers and stack trace will
      be displayed on console and then panic occurs.
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      7f2b65bd
    • Arnd Bergmann's avatar
      [PATCH] fix reading string module parameters in sysfs · f1577452
      Arnd Bergmann authored
      Reading the contents of a module_param_string through sysfs currently
      oopses because the param_get_charp() function cannot operate on a
      kparam_string struct.  This introduces the required param_get_string.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      f1577452
    • Mike Kravetz's avatar
      [PATCH] proc fs task name locking fix · 4b4b699d
      Mike Kravetz authored
      Races have been observed between excec-time overwriting of task->comm and
      /proc accesses to the same data.  This causes environment string
      information to appear in /proc.
      
      Fix that up by taking task_lock() around updates to and accesses to
      task->comm.
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      4b4b699d
    • Randy Dunlap's avatar
      [PATCH] tg3 section fix · 9026a8d6
      Randy Dunlap authored
      add_pin_to_irq() should not be __init; it is used after init code.
      Signed-off-by: default avatarRandy Dunlap <rddunlap@osdl.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      9026a8d6
    • Ingo Molnar's avatar
      [PATCH] context-switching overhead in X, ioport() · a55702bb
      Ingo Molnar authored
      while debugging/improving scheduling latencies i got the following
      strange latency report from Lee Revell:
      
        http://krustophenia.net/testresults.php?dataset=2.6.8.1-P6#/var/www/2.6.8.1-P6
      
      this trace shows a 120 usec latency caused by XFree86, on a 600 MHz x86
      system. Looking closer reveals:
      
        00000002 0.006ms (+0.003ms): __switch_to (schedule)
        00000002 0.088ms (+0.082ms): finish_task_switch (schedule)
      
      it took more than 80 usecs for XFree86 to do a context-switch!
      
      it turns out that the reason for this (massive) context-switching
      overhead is the following change in 2.6.8:
      
            [PATCH] larger IO bitmaps
      
      To demonstrate the effect of this change i've written ioperm-latency.c
      (attached), which gives the following on vanilla 2.6.8.1:
      
        # ./ioperm-latency
        default no ioperm:             scheduling latency: 2528 cycles
        turning on port 80 ioperm:     scheduling latency: 10563 cycles
        turning on port 65535 ioperm:  scheduling latency: 10517 cycles
      
      the ChangeSet says:
      
              Now, with the lazy bitmap allocation and per-CPU TSS, this
              will really not drain any resources I think.
      
      this is plain wrong. An increase in the IO bitmap size introduces
      per-context-switch overhead as well: we now have to copy an 8K bitmap
      every time XFree86 context-switches - even though XFree86 never uses
      ports higher than 1024! I've straced XFree86 on a number of x86 systems
      and in every instance ioperm() was used - so i'd say the majority of x86
      Linux systems running 2.6.8.1 are affected by this problem.
      
      This not only causes lots of overhead, it also trashes ~16K out of the
      L1 and L2 caches, on every context-switch. It's as if XFree86 did a L1
      cache flush on every context-switch ...
      
      the simple solution would be to revert IO_BITMAP_BITS back to 1024 and
      release 2.6.8.2?
      
      I've implemented another solution as well, which tracks the
      highest-enabled port # for every task and does the copying of the bitmap
      intelligently. (patch attached) The patched kernel gives:
      
        # ./ioperm-latency
        default no ioperm:             scheduling latency: 2423 cycles
        turning on port 80 ioperm:     scheduling latency: 2503 cycles
        turning on port 65535 ioperm:  scheduling latency: 10607 cycles
      
      this is much more acceptable - the full overhead only occurs in the very
      unlikely event of a task using the high ioport range. X doesnt suffer
      any significant overhead.
      
      (tracking the maximum allowed port # also allows a simplification of
      io_bitmap handling: e.g. we dont do the invalid-offset trick anymore -
      the IO bitmap in the TSS is always valid and secure.)
      
      I tested the patch on x86 SMP and UP, it works fine for me. I tested
      boundary conditions as well, it all seems secure.
      
      	Ingo
      
      #include <errno.h>
      #include <stdio.h>
      #include <sched.h>
      #include <signal.h>
      #include <sys/io.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <linux/unistd.h>
      
      #define CYCLES(x) asm volatile ("rdtsc" :"=a" (x)::"edx")
      
      #define __NR_sched_set_affinity 241
      _syscall3 (int, sched_set_affinity, pid_t, pid, unsigned int, mask_len, unsigned long *, mask)
      
      /*
       * Use a pair of RT processes bound to the same CPU to measure
       * context-switch overhead:
       */
      static void measure(void)
      {
      	unsigned long i, min = ~0UL, pid, mask = 1, t1, t2;
      
      	sched_set_affinity(0, sizeof(mask), &mask);
      
      	pid = fork();
      	if (!pid)
      		for (;;) {
      			asm volatile ("sti; nop; cli");
      			sched_yield();
      		}
      
      	sched_yield();
      	for (i = 0; i < 100; i++) {
      		asm volatile ("sti; nop; cli");
      		CYCLES(t1);
      		sched_yield();
      		CYCLES(t2);
      		if (i > 10) {
      			if (t2 - t1 < min)
      				min = t2 - t1;
      		}
      	}
      	asm volatile ("sti");
      
      	kill(pid, 9);
      	printf("scheduling latency: %ld cycles\n", min);
      	sched_yield();
      }
      
      int main(void)
      {
      	struct sched_param p = { sched_priority: 2 };
      	unsigned long mask = 1;
      
      	if (iopl(3)) {
      		printf("need to run as root!\n");
      		exit(-1);
      	}
      	sched_setscheduler(0, SCHED_FIFO, &p);
      	sched_set_affinity(0, sizeof(mask), &mask);
      
      	printf("default no ioperm:             ");
      	measure();
      
      	printf("turning on port 80 ioperm:     ");
      	ioperm(0x80,1,1);
      	measure();
      
      	printf("turning on port 65535 ioperm:  ");
      	if (ioperm(0xffff,1,1))
      		printf("FAILED - older kernel.\n");
      	else
      		measure();
      
      	return 0;
      }
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      a55702bb
  2. 22 Aug, 2004 20 commits
  3. 20 Aug, 2004 6 commits