From fca921e0a5d89c1b0efc12bcf910e25c0c5219f2 Mon Sep 17 00:00:00 2001 From: "kaf24@freefall.cl.cam.ac.uk" Date: Mon, 25 Oct 2004 10:31:11 +0000 Subject: [PATCH] bitkeeper revision 1.1159.1.270 (417cd5efuYLEDeFTqZTJOYsZwD2mag) Get rid of critical-region checking. It gets in the way and has found precisely zero real bugs! --- xen/arch/x86/nmi.c | 1 - xen/arch/x86/traps.c | 7 ---- xen/common/kernel.c | 45 ------------------------ xen/include/asm-x86/shadow.h | 4 +-- xen/include/asm-x86/x86_32/uaccess.h | 4 --- xen/include/xen/spinlock.h | 51 ---------------------------- 6 files changed, 2 insertions(+), 110 deletions(-) diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c index d2554aeffc..ec12834ee7 100644 --- a/xen/arch/x86/nmi.c +++ b/xen/arch/x86/nmi.c @@ -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); } } diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 94cfa01555..7960848b53 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -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"); diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 7ec89ae314..c2ecc32c3e 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -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 */ diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h index b28e7dfdf1..b3bc087d08 100644 --- a/xen/include/asm-x86/shadow.h +++ b/xen/include/asm-x86/shadow.h @@ -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); diff --git a/xen/include/asm-x86/x86_32/uaccess.h b/xen/include/asm-x86/x86_32/uaccess.h index 58829fa204..776639782c 100644 --- a/xen/include/asm-x86/x86_32/uaccess.h +++ b/xen/include/asm-x86/x86_32/uaccess.h @@ -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; diff --git a/xen/include/xen/spinlock.h b/xen/include/xen/spinlock.h index 8998c29894..ef58ba591b 100644 --- a/xen/include/xen/spinlock.h +++ b/xen/include/xen/spinlock.h @@ -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__ */ -- 2.39.5