Loading kernel/lockdep.c +8 −78 Original line number Diff line number Diff line Loading @@ -2061,13 +2061,13 @@ typedef int (*check_usage_f)(struct task_struct *, struct held_lock *, enum lock_usage_bit bit, const char *name); static int mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, int new_bit) mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit) { const char *name = state_name(new_bit); const char *rname = state_rname(new_bit); int excl_bit = exclusive_bit(new_bit); int read = new_bit & 1; int dir = new_bit & 2; check_usage_f usage = dir ? Loading @@ -2075,57 +2075,17 @@ mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, if (!valid_state(curr, this, new_bit, excl_bit)) return 0; if (!valid_state(curr, this, new_bit, excl_bit + 1)) return 0; /* * just marked it hardirq-safe, check that this lock * took no hardirq-unsafe lock in the past: */ if (!usage(curr, this, excl_bit, name)) return 0; #if STRICT_READ_CHECKS /* * just marked it hardirq-safe, check that this lock * took no hardirq-unsafe-read lock in the past: */ if (!usage(curr, this, excl_bit + 1, rname)) if (!read && !valid_state(curr, this, new_bit, excl_bit + 1)) return 0; #endif if (state_verbose(new_bit, hlock_class(this))) return 2; return 1; } static int mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, int new_bit) { const char *name = state_name(new_bit); const char *rname = state_rname(new_bit); int excl_bit = exclusive_bit(new_bit); int dir = new_bit & 2; if (!valid_state(curr, this, new_bit, excl_bit)) if ((!read || (!dir || STRICT_READ_CHECKS)) && !usage(curr, this, excl_bit, name)) return 0; if (!dir) { /* * just marked it hardirq-read-safe, check that this lock * took no hardirq-unsafe lock in the past: */ if (!check_usage_forwards(curr, this, excl_bit, name)) return 0; } else if (STRICT_READ_CHECKS) { /* * just marked it hardirq-read-unsafe, check that no * hardirq-safe lock in the system ever took it in the past: */ if (!check_usage_backwards(curr, this, excl_bit, name)) if ((!read && STRICT_READ_CHECKS) && !usage(curr, this, excl_bit + 1, rname)) return 0; } if (state_verbose(new_bit, hlock_class(this))) return 2; Loading @@ -2133,36 +2093,6 @@ mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, return 1; } static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, enum lock_usage_bit new_bit) { int ret = 1; switch(new_bit) { case LOCK_USED_IN_HARDIRQ: case LOCK_USED_IN_SOFTIRQ: case LOCK_USED_IN_RECLAIM_FS: case LOCK_ENABLED_HARDIRQ: case LOCK_ENABLED_SOFTIRQ: case LOCK_ENABLED_RECLAIM_FS: return mark_lock_irq_write(curr, this, new_bit); case LOCK_USED_IN_HARDIRQ_READ: case LOCK_USED_IN_SOFTIRQ_READ: case LOCK_USED_IN_RECLAIM_FS_READ: case LOCK_ENABLED_HARDIRQ_READ: case LOCK_ENABLED_SOFTIRQ_READ: case LOCK_ENABLED_RECLAIM_FS_READ: return mark_lock_irq_read(curr, this, new_bit); default: WARN_ON(1); break; } return ret; } enum mark_type { #define LOCKDEP_STATE(__STATE) __STATE, #include "lockdep_states.h" Loading Loading
kernel/lockdep.c +8 −78 Original line number Diff line number Diff line Loading @@ -2061,13 +2061,13 @@ typedef int (*check_usage_f)(struct task_struct *, struct held_lock *, enum lock_usage_bit bit, const char *name); static int mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, int new_bit) mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit) { const char *name = state_name(new_bit); const char *rname = state_rname(new_bit); int excl_bit = exclusive_bit(new_bit); int read = new_bit & 1; int dir = new_bit & 2; check_usage_f usage = dir ? Loading @@ -2075,57 +2075,17 @@ mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, if (!valid_state(curr, this, new_bit, excl_bit)) return 0; if (!valid_state(curr, this, new_bit, excl_bit + 1)) return 0; /* * just marked it hardirq-safe, check that this lock * took no hardirq-unsafe lock in the past: */ if (!usage(curr, this, excl_bit, name)) return 0; #if STRICT_READ_CHECKS /* * just marked it hardirq-safe, check that this lock * took no hardirq-unsafe-read lock in the past: */ if (!usage(curr, this, excl_bit + 1, rname)) if (!read && !valid_state(curr, this, new_bit, excl_bit + 1)) return 0; #endif if (state_verbose(new_bit, hlock_class(this))) return 2; return 1; } static int mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, int new_bit) { const char *name = state_name(new_bit); const char *rname = state_rname(new_bit); int excl_bit = exclusive_bit(new_bit); int dir = new_bit & 2; if (!valid_state(curr, this, new_bit, excl_bit)) if ((!read || (!dir || STRICT_READ_CHECKS)) && !usage(curr, this, excl_bit, name)) return 0; if (!dir) { /* * just marked it hardirq-read-safe, check that this lock * took no hardirq-unsafe lock in the past: */ if (!check_usage_forwards(curr, this, excl_bit, name)) return 0; } else if (STRICT_READ_CHECKS) { /* * just marked it hardirq-read-unsafe, check that no * hardirq-safe lock in the system ever took it in the past: */ if (!check_usage_backwards(curr, this, excl_bit, name)) if ((!read && STRICT_READ_CHECKS) && !usage(curr, this, excl_bit + 1, rname)) return 0; } if (state_verbose(new_bit, hlock_class(this))) return 2; Loading @@ -2133,36 +2093,6 @@ mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, return 1; } static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, enum lock_usage_bit new_bit) { int ret = 1; switch(new_bit) { case LOCK_USED_IN_HARDIRQ: case LOCK_USED_IN_SOFTIRQ: case LOCK_USED_IN_RECLAIM_FS: case LOCK_ENABLED_HARDIRQ: case LOCK_ENABLED_SOFTIRQ: case LOCK_ENABLED_RECLAIM_FS: return mark_lock_irq_write(curr, this, new_bit); case LOCK_USED_IN_HARDIRQ_READ: case LOCK_USED_IN_SOFTIRQ_READ: case LOCK_USED_IN_RECLAIM_FS_READ: case LOCK_ENABLED_HARDIRQ_READ: case LOCK_ENABLED_SOFTIRQ_READ: case LOCK_ENABLED_RECLAIM_FS_READ: return mark_lock_irq_read(curr, this, new_bit); default: WARN_ON(1); break; } return ret; } enum mark_type { #define LOCKDEP_STATE(__STATE) __STATE, #include "lockdep_states.h" Loading