1. 16 Sep, 2009 2 commits
  2. 12 Jun, 2009 1 commit
    • Robin Getz's avatar
      Blackfin: make deferred hardware errors more exact · b9a3899d
      Robin Getz authored
      
      
      Hardware errors on the Blackfin architecture are queued by nature of the
      hardware design.  Things that could generate a hardware level queue up at
      the system interface and might not process until much later, at which
      point the system would send a notification back to the core.
      
      As such, it is possible for user space code to do something that would
      trigger a hardware error, but have it delay long enough for the process
      context to switch.  So when the hardware error does signal, we mistakenly
      evaluate it as a different process or as kernel context and panic (erp!).
      This makes it pretty difficult to find the offending context.  But wait,
      there is good news somewhere.
      
      By forcing a SSYNC in the interrupt entry, we force all pending queues at
      the system level to be processed and all hardware errors to be signaled.
      Then we check the current interrupt state to see if the hardware error is
      now signaled.  If so, we re-queue the current interrupt and return thus
      allowing the higher priority hardware error interrupt to process properly.
      Since we haven't done any other context processing yet, the right context
      will be selected and killed.  There is still the possibility that the
      exact offending instruction will be unknown, but at least we'll have a
      much better idea of where to look.
      
      The downside of course is that this causes system-wide syncs at every
      interrupt point which results in significant performance degradation.
      Since this situation should not occur in any properly configured system
      (as hardware errors are triggered by things like bad pointers), make it a
      debug configuration option and disable it by default.
      Signed-off-by: default avatarRobin Getz <robin.getz@analog.com>
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      b9a3899d
  3. 04 Mar, 2009 1 commit
  4. 04 Feb, 2009 1 commit
  5. 07 Jan, 2009 3 commits
  6. 09 Oct, 2008 1 commit
  7. 08 Oct, 2008 1 commit
  8. 26 Aug, 2008 1 commit
  9. 21 Dec, 2007 1 commit
  10. 27 Jan, 2008 1 commit
    • Robin Getz's avatar
      [Blackfin] arch: fix bug - trap_tests fails to recover on some tests. · 13fe24f3
      Robin Getz authored
      http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=3719
      
      
      
      When the CPLBs get a miss, we do:
        - find a victim in the HW table
        - remove the victim
        - find the replacement in the software table
        - put it into the HW table.
      
      If we can't find a replacement in the software table, we accidently
      leave a duplicate in the HW table. This patch ensures that duplicate
      is marked as not valid.
      
      What we should do is find the replacement in the software table, before
      we find a victim in the HW table - but its too late in the release cycle
      to do that much restructuring of this code.
      
      Rather that duplicate code, connect Hardware Errors (irq5) into trap_c,
      so user space processes get killed properly.
      
      The rest of irq_panic() can be moved into traps.c (later)
      
      There is still a small corner case that causes problems when a
      pheriperal interrupt goes off a single cycle before a user space
      hardware error. This causes a kernel panic, rather than the user
      space process being killed.
      
      But, this checkin makes things work in 99.9% of the cases, and is a vast
      improvement from what is there today (which fails 100% of the time).
      Signed-off-by: default avatarRobin Getz <robin.getz@analog.com>
      Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
      13fe24f3
  11. 15 Nov, 2007 1 commit
  12. 05 Aug, 2007 1 commit
  13. 03 Aug, 2007 1 commit
  14. 24 Jul, 2007 1 commit
  15. 21 Jun, 2007 1 commit
  16. 20 Jun, 2007 1 commit
  17. 11 Jun, 2007 1 commit
  18. 07 May, 2007 1 commit