]> xenbits.xensource.com Git - xen.git/commitdiff
bitkeeper revision 1.1159.1.270 (417cd5efuYLEDeFTqZTJOYsZwD2mag)
authorkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>
Mon, 25 Oct 2004 10:31:11 +0000 (10:31 +0000)
committerkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>
Mon, 25 Oct 2004 10:31:11 +0000 (10:31 +0000)
Get rid of critical-region checking. It gets in the way and has found
precisely zero real bugs!

xen/arch/x86/nmi.c
xen/arch/x86/traps.c
xen/common/kernel.c
xen/include/asm-x86/shadow.h
xen/include/asm-x86/x86_32/uaccess.h
xen/include/xen/spinlock.h

index d2554aeffcc51fba00274fd32e94b17c02c753d5..ec12834ee73d915eac7e2dc057bfd1d1b4c23a46 100644 (file)
@@ -288,7 +288,6 @@ void nmi_watchdog_tick (struct pt_regs * regs)
         if ( alert_counter[cpu] == 5*nmi_hz )
         {
             console_force_unlock();
-            disable_criticalregion_checking();
             die("NMI Watchdog detected LOCKUP on CPU", regs, cpu);
         }
     } 
index 94cfa01555d4b4ce545c1e8ac5d1033467e5b5bf..7960848b533e13072b1d5eea9cdab57cdd4ce6a2 100644 (file)
@@ -342,9 +342,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs, long error_code)
 
     perfc_incrc(page_faults);
 
-    ASSERT_no_criticalregion();
-
-
     if ( likely(VM_ASSIST(d, VMASST_TYPE_writable_pagetables)) )
     {
         if ( unlikely(ptwr_info[cpu].ptinfo[PTWR_PT_ACTIVE].l1va) &&
@@ -445,8 +442,6 @@ asmlinkage void do_general_protection(struct pt_regs *regs, long error_code)
     trap_info_t *ti;
     unsigned long fixup;
 
-    ASSERT_no_criticalregion();
-
     /* Badness if error in ring 0, or result of an interrupt. */
     if ( !(regs->xcs & 3) || (error_code & 1) )
         goto gp_in_kernel;
@@ -527,7 +522,6 @@ asmlinkage void do_general_protection(struct pt_regs *regs, long error_code)
 asmlinkage void mem_parity_error(struct pt_regs *regs)
 {
     console_force_unlock();
-    disable_criticalregion_checking();
 
     printk("\n\n");
 
@@ -548,7 +542,6 @@ asmlinkage void mem_parity_error(struct pt_regs *regs)
 asmlinkage void io_check_error(struct pt_regs *regs)
 {
     console_force_unlock();
-    disable_criticalregion_checking();
 
     printk("\n\n");
 
index 7ec89ae31499abecadf94909a1d6a8b2f3602a94..c2ecc32c3eec83e65b86ed3adb2223ce38a2d165 100644 (file)
@@ -372,48 +372,3 @@ long do_ni_hypercall(void)
     /* No-op hypercall. */
     return -ENOSYS;
 }
-
-/*
- * Lock debugging
- */
-
-#ifndef NDEBUG
-
-static int crit_count[NR_CPUS], crit_checking_disabled[NR_CPUS];
-
-void disable_criticalregion_checking(void)
-{
-    int cpu = smp_processor_id();
-    crit_checking_disabled[cpu]++;
-}
-
-void criticalregion_enter(void)
-{
-    int cpu = smp_processor_id();
-    if ( crit_checking_disabled[cpu] )
-        return;
-    ASSERT(crit_count[cpu] >= 0);
-    crit_count[cpu]++;
-}
-
-void criticalregion_exit(void)
-{
-    int cpu = smp_processor_id();
-    if ( crit_checking_disabled[cpu] )
-        return;
-    crit_count[cpu]--;
-    ASSERT(crit_count[cpu] >= 0);
-}
-
-void ASSERT_no_criticalregion(void)
-{
-    int cpu = smp_processor_id();
-    if ( (crit_count[cpu] == 0) || crit_checking_disabled[cpu] )
-        return;
-    disable_criticalregion_checking();
-    ASSERT(crit_count[cpu] >= 0); /* -ve count is a special kind of bogus! */
-    ASSERT(crit_count[cpu] == 0); /* we should definitely take this path   */
-    ASSERT(1); /* NEVER GET HERE! */
-}
-
-#endif /* !NDEBUG */
index b28e7dfdf10d605f37856a700c0e84eb00c777f6..b3bc087d083750d1e6b05d934bdefdcf7bd8fdd5 100644 (file)
@@ -24,8 +24,8 @@
 
 #define shadow_mode(_d)      ((_d)->mm.shadow_mode)
 #define shadow_lock_init(_d) spin_lock_init(&(_d)->mm.shadow_lock)
-#define shadow_lock(_m)      spin_lock_nochecking(&(_m)->shadow_lock)
-#define shadow_unlock(_m)    spin_unlock_nochecking(&(_m)->shadow_lock)
+#define shadow_lock(_m)      spin_lock(&(_m)->shadow_lock)
+#define shadow_unlock(_m)    spin_unlock(&(_m)->shadow_lock)
 
 extern void shadow_mode_init(void);
 extern int shadow_mode_control(struct domain *p, dom0_shadow_control_t *sc);
index 58829fa204a169ef73039a610cdb4d4823b682f9..776639782c50e1b2c01ccc7dc0905dbd85a377f4 100644 (file)
@@ -243,7 +243,6 @@ struct __large_struct { unsigned long buf[100]; };
  * aliasing issues.
  */
 #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret)      \
-       ASSERT_no_criticalregion();                                     \
        __asm__ __volatile__(                                           \
                "1:     mov"itype" %"rtype"1,%2\n"                      \
                "2:\n"                                                  \
@@ -292,7 +291,6 @@ do {                                                                        \
 } while (0)
 
 #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret)      \
-       ASSERT_no_criticalregion();                                     \
        __asm__ __volatile__(                                           \
                "1:     mov"itype" %2,%"rtype"1\n"                      \
                "2:\n"                                                  \
@@ -336,7 +334,6 @@ unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned lo
 static always_inline unsigned long
 __copy_to_user(void __user *to, const void *from, unsigned long n)
 {
-       ASSERT_no_criticalregion();
        if (__builtin_constant_p(n)) {
                unsigned long ret;
 
@@ -375,7 +372,6 @@ __copy_to_user(void __user *to, const void *from, unsigned long n)
 static always_inline unsigned long
 __copy_from_user(void *to, const void __user *from, unsigned long n)
 {
-       ASSERT_no_criticalregion();
        if (__builtin_constant_p(n)) {
                unsigned long ret;
 
index 8998c2989407f8947980f8c46d4fd913284b5307..ef58ba591b6e1e7c15d51ecfa594a8a02d689a19 100644 (file)
@@ -72,46 +72,6 @@ typedef struct { int gcc_is_buggy; } rwlock_t;
 
 #endif
 
-#ifndef NDEBUG
-
-extern void criticalregion_enter(void);
-extern void criticalregion_exit(void);
-extern void ASSERT_no_criticalregion(void);
-extern void disable_criticalregion_checking(void);
-
-#define spin_lock(_lock) \
-    do { criticalregion_enter(); _raw_spin_lock(_lock); } while (0)
-#define spin_unlock(_lock) \
-    do { _raw_spin_unlock(_lock); criticalregion_exit(); } while (0)
-#define spin_lock_recursive(_lock) \
-    do { criticalregion_enter(); _raw_spin_lock_recursive(_lock); } while (0)
-#define spin_unlock_recursive(_lock) \
-    do { _raw_spin_unlock_recursive(_lock); criticalregion_exit(); } while (0)
-#define read_lock(_lock) \
-    do { criticalregion_enter(); _raw_read_lock(_lock); } while (0)
-#define read_unlock(_lock) \
-    do { _raw_read_unlock(_lock); criticalregion_exit(); } while (0)
-#define write_lock(_lock) \
-    do { criticalregion_enter(); _raw_write_lock(_lock); } while (0)
-#define write_unlock(_lock) \
-    do { _raw_write_unlock(_lock); criticalregion_exit(); } while (0)
-
-static inline int spin_trylock(spinlock_t *lock)
-{
-    criticalregion_enter();
-    if ( !_raw_spin_trylock(lock) )
-    {
-        criticalregion_exit();
-        return 0;
-    }
-    return 1;
-}
-
-#else
-
-#define ASSERT_no_criticalregion()        ((void)0)
-#define disable_criticalregion_checking() ((void)0)
-
 #define spin_lock(_lock)             _raw_spin_lock(_lock)
 #define spin_trylock(_lock)          _raw_spin_trylock(_lock)
 #define spin_unlock(_lock)           _raw_spin_unlock(_lock)
@@ -122,15 +82,4 @@ static inline int spin_trylock(spinlock_t *lock)
 #define write_lock(_lock)            _raw_write_lock(_lock)
 #define write_unlock(_lock)          _raw_write_unlock(_lock)
 
-#endif
-
-/*
- * Use these if you have taken special care to ensure that certain unsafe
- * things can occur in your critical region (e.g., faults, user-space
- * accesses). 
- */
-#define spin_lock_nochecking(_lock)    _raw_spin_lock(_lock)
-#define spin_trylock_nochecking(_lock) _raw_spin_trylock(_lock)
-#define spin_unlock_nochecking(_lock)  _raw_spin_unlock(_lock)
-
 #endif /* __SPINLOCK_H__ */