1. 18 Mar, 2008 7 commits
  2. 17 Mar, 2008 21 commits
  3. 16 Mar, 2008 12 commits
    • Mike Isely's avatar
      drm: Fix race that can lockup the kernel · 9df5808c
      Mike Isely authored
      The i915_vblank_swap() function schedules an automatic buffer swap
      upon receipt of the vertical sync interrupt.  Such an operation is
      lengthy so it can't be allowed to happen in normal interrupt context,
      thus the DRM implements this by scheduling the work in a kernel
      softirq-scheduled tasklet.  In order for the buffer swap to work
      safely, the DRM's central lock must be taken, via a call to
      drm_lock_take() located in drivers/char/drm/drm_irq.c within the
      function drm_locked_tasklet_func().  The lock-taking logic uses a
      non-interrupt-blocking spinlock to implement the manipulations needed
      to take the lock.  This semantic would be safe if all attempts to use
      the spinlock only happen from process context.  However this buffer
      swap happens from softirq context which is really a form of interrupt
      context.  Thus we have an unsafe situation, in that
      drm_locked_tasklet_func() can block on a spinlock already taken by a
      thread in process context which will never get scheduled again because
      of the blocked softirq tasklet.  This wedges the kernel hard.
      
      To trigger this bug, run a dual-head cloned mode configuration which
      uses the i915 drm, then execute an opengl application which
      synchronizes buffer swaps against the vertical sync interrupt.  In my
      testing, a lockup always results after running anywhere from 5 minutes
      to an hour and a half.  I believe dual-head is needed to really
      trigger the problem because then the vertical sync interrupt handling
      is no longer predictable (due to being interrupt-sourced from two
      different heads running at different speeds).  This raises the
      probability of the tasklet trying to run while the userspace DRI is
      doing things to the GPU (and manipulating the DRM lock).
      
      The fix is to change the relevant spinlock semantics to be the
      interrupt-blocking form.  After this change I am no longer able to
      trigger the lockup; the longest test run so far was 20 hours (test
      stopped after that point).
      
      Note: I have examined the places where this spinlock is being
      employed; all are reasonably short bounded sequences and should be
      suitable for interrupts being blocked without impacting overall kernel
      interrupt response latency.
      Signed-off-by: default avatarMike Isely <isely@pobox.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      9df5808c
    • Linus Torvalds's avatar
      Linux 2.6.25-rc6 · a978b30a
      Linus Torvalds authored
      a978b30a
    • Linus Torvalds's avatar
      Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 · 69d1d523
      Linus Torvalds authored
      * 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6:
        [PARISC] make ptr_to_pide() static
        [PARISC] head.S: section mismatch fixes
        [PARISC] add back Crestone Peak cpu
        [PARISC] futex: special case cmpxchg NULL in kernel space
        [PARISC] clean up show_stack
        [PARISC] add pa8900 CPUs to hardware inventory
        [PARISC] clean up include/asm-parisc/elf.h
        [PARISC] move defconfig to arch/parisc/configs/
        [PARISC] add back AD1889 MAINTAINERS entry
        [PARISC] pdc_console: fix bizarre panic on boot
        [PARISC] dump_stack in show_regs
        [PARISC] pdc_stable: fix compile errors
        [PARISC] remove unused pdc_iodc_printf function
        [PARISC] bump __NR_syscalls
        [PARISC] unbreak pgalloc.h
        [PARISC] move VMALLOC_* definitions to fixmap.h
        [PARISC] wire up timerfd syscalls
        [PARISC] remove old timerfd syscall
      69d1d523
    • FUJITA Tomonori's avatar
    • Helge Deller's avatar
      [PARISC] head.S: section mismatch fixes · 0c634cc6
      Helge Deller authored
      - move boot_args[] into the init section
      - move $global$ into the read_mostly section
      - fix the following two section mismatches:
      WARNING: vmlinux.o(.text+0x9c): Section mismatch: reference to .init.text:start_kernel (between '$pgt_fill_loop' and '$is_pa20')
      WARNING: vmlinux.o(.text+0xa0): Section mismatch: reference to .init.text:start_kernel (between '$pgt_fill_loop' and '$is_pa20')
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      SIgned-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      0c634cc6
    • Kyle McMartin's avatar
      [PARISC] add back Crestone Peak cpu · ab86adb4
      Kyle McMartin authored
      Crestone Peak Slow is the 800MHz PA-8800 cpu in the C8000.
      0x88B is probably the Crestone Peak Fast.
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      ab86adb4
    • Kyle McMartin's avatar
      [PARISC] futex: special case cmpxchg NULL in kernel space · c20a84c9
      Kyle McMartin authored
      Commit a0c1e907 added code to futex.c
      to detect whether futex_atomic_cmpxchg_inatomic was implemented at run
      time:
      
      +       curval = cmpxchg_futex_value_locked(NULL, 0, 0);
      +       if (curval == -EFAULT)
      +               futex_cmpxchg_enabled = 1;
      
      This is bogus on parisc, since page zero in kernel virtual space is the
      gateway page for syscall entry, and should not be read from the kernel.
      (That, and we really don't like the kernel faulting on its own address
       space...)
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      c20a84c9
    • Kyle McMartin's avatar
      [PARISC] clean up show_stack · dc39455e
      Kyle McMartin authored
      When we show_regs, we obviously have a struct pt_regs of the calling
      frame. Use these in show_stack so we don't have the entire bogus call trace
      up to the show_stack call.
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      dc39455e
    • James Bottomley's avatar
      [PARISC] add pa8900 CPUs to hardware inventory · b23f5baa
      James Bottomley authored
      This patch adds the known pa8900 CPUs to the inventory list and removes
      the Crestone Peak one which apparently never escaped into the wild.
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      b23f5baa
    • Randolph Chung's avatar
      [PARISC] clean up include/asm-parisc/elf.h · fd5d3f6a
      Randolph Chung authored
      Cleanup some cruft. No functionality changes.
      Signed-off-by: default avatarRandolph Chung <tausq@parisc-linux.org>
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      fd5d3f6a
    • Adrian Bunk's avatar
      [PARISC] move defconfig to arch/parisc/configs/ · c04f7ae2
      Adrian Bunk authored
      This patch moves the default parisc defconfig to
      arch/parisc/configs/generic_defconfig where it belongs and selects it as
      the default defconfig through KBUILD_DEFCONFIG.
      Signed-off-by: default avatarAdrian Bunk <adrian.bunk@movial.fi>
      Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
      c04f7ae2
    • Thibaut VARENE's avatar
      2f39d519