1. 20 Jul, 2010 1 commit
  2. 16 Jul, 2010 1 commit
    • Simon Marlow's avatar
      Use a separate mutex to protect all_tasks, avoiding a lock-order-reversal · ed301949
      Simon Marlow authored
      In GHC 6.12.x I found a rare deadlock caused by this
      lock-order-reversal:
      
      AQ cap->lock
        startWorkerTask
          newTask
            AQ sched_mutex
      
      scheduleCheckBlackHoles
        AQ sched_mutex
         unblockOne_
          wakeupThreadOnCapabilty
            AQ cap->lock
      
      so sched_mutex and cap->lock are taken in a different order in two
      places.
      
      This doesn't happen in the HEAD because we don't have
      scheduleCheckBlackHoles, but I thought it would be prudent to make
      this less likely to happen in the future by using a different mutex in
      newTask.  We can clearly see that the all_tasks mutex cannot be
      involved in a deadlock, becasue we never call anything else while
      holding it.
      ed301949
  3. 17 Jul, 2010 1 commit
  4. 16 Jul, 2010 2 commits
  5. 13 Jul, 2010 1 commit
  6. 08 Jul, 2010 2 commits
    • Simon Marlow's avatar
      New asynchronous exception control API (ghc parts) · ad3b79d2
      Simon Marlow authored
      As discussed on the libraries/haskell-cafe mailing lists
        http://www.haskell.org/pipermail/libraries/2010-April/013420.html
      
      This is a replacement for block/unblock in the asychronous exceptions
      API to fix a problem whereby a function could unblock asynchronous
      exceptions even if called within a blocked context.
      
      The new terminology is "mask" rather than "block" (to avoid confusion
      due to overloaded meanings of the latter).
      
      In GHC, we changed the names of some primops:
      
        blockAsyncExceptions#   -> maskAsyncExceptions#
        unblockAsyncExceptions# -> unmaskAsyncExceptions#
        asyncExceptionsBlocked# -> getMaskingState#
      
      and added one new primop:
      
        maskUninterruptible#
      
      See the accompanying patch to libraries/base for the API changes.
      ad3b79d2
    • Simon Marlow's avatar
      Win32 getProcessElapsedTime: use a higher-resolution time source · 1fb0f13a
      Simon Marlow authored
      QueryPerformanceCounter() on Windows gives much better resolution than
      GetSystemTimeAsFileTime().
      1fb0f13a
  7. 05 Jul, 2010 1 commit
    • Simon Marlow's avatar
      Disable dynamic linking optimisations on OS X · 062aa8af
      Simon Marlow authored
      To improve performance of the RTS when dynamically linked on x86, I
      previously disabled -fPIC for certain critical modules (the GC, and a
      few others).  However, build reports suggest that the dynamic linker
      on OS X doesn't like this, so I'm disabling this optimsation on that
      platform.
      062aa8af
  8. 01 Jul, 2010 1 commit
  9. 28 Jun, 2010 1 commit
  10. 24 Jun, 2010 4 commits
  11. 22 Jun, 2010 1 commit
    • dmp@rice.edu's avatar
      Add support for collecting PAPI native events · d4942f78
      dmp@rice.edu authored
      This patch extends the PAPI support in the RTS to allow collection of native
      events. PAPI can collect data for native events that are exposed by the
      hardware beyond the PAPI present events. The native events supported on your
      hardware can found by using the papi_native_avail tool.
      
      The RTS already allows users to specify PAPI preset events from the command
      line. This patch extends that support to allow users to specify native events.
      The changes needed are:
      
      1) New option (#) for the RTS PAPI flag for native events. For example, to
         collect the native event 0x40000000, use ./a.out +RTS -a#0x40000000 -sstderr
      
      2) Update the PAPI_FLAGS struct to store whether the user specified event is a
         papi preset or a native event
      
      3) Update init_countable_events function to add the native events after parsing
         the event code and decoding the name using PAPI_event_code_to_name
      d4942f78
  12. 20 Jun, 2010 1 commit
  13. 19 Jun, 2010 2 commits
  14. 01 Jan, 2010 1 commit
  15. 17 Jun, 2010 4 commits
  16. 04 Jun, 2010 1 commit
  17. 09 May, 2010 1 commit
  18. 15 Jun, 2010 1 commit
  19. 11 Jun, 2010 1 commit
  20. 10 Jun, 2010 1 commit
  21. 28 May, 2010 1 commit
  22. 26 May, 2010 2 commits
  23. 01 Jun, 2010 1 commit
  24. 29 May, 2010 4 commits
  25. 25 May, 2010 3 commits