lkml.org 
[lkml]   [2009]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 15/21] lockdep: merge the !_READ mark_lock_irq() helpers
    These two are also remakably similar

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    kernel/lockdep.c | 58 ++++++++++++++-----------------------------------------
    1 file changed, 15 insertions(+), 43 deletions(-)
    Index: linux-2.6/kernel/lockdep.c
    ===================================================================
    --- linux-2.6.orig/kernel/lockdep.c
    +++ linux-2.6/kernel/lockdep.c
    @@ -2057,31 +2057,39 @@ static int exclusive_bit(int new_bit)
    return state | (dir ^ 2);
    }

    +typedef int (*check_usage_f)(struct task_struct *, struct held_lock *,
    + enum lock_usage_bit bit, const char *name);
    +
    static int
    -mark_lock_irq_used_in(struct task_struct *curr, struct held_lock *this,
    +mark_lock_irq_write(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;
    +
    + check_usage_f usage = dir ?
    + check_usage_backwards : check_usage_forwards;

    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 (!check_usage_forwards(curr, this, excl_bit, name))
    + 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 (!check_usage_forwards(curr, this, excl_bit + 1, rname))
    + if (!usage(curr, this, excl_bit + 1, rname))
    return 0;
    #endif
    if (state_verbose(new_bit, hlock_class(this)))
    @@ -2125,40 +2133,6 @@ mark_lock_irq_read(struct task_struct *c
    return 1;
    }

    -static int
    -mark_lock_irq_enabled(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);
    -
    - 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-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))
    - return 0;
    -#if STRICT_READ_CHECKS
    - /*
    - * just marked it hardirq-unsafe, check that no
    - * hardirq-safe-read lock in the system ever took
    - * it in the past:
    - */
    - if (!check_usage_backwards(curr, this, excl_bit + 1, rname))
    - return 0;
    -#endif
    - if (state_verbose(new_bit, hlock_class(this)))
    - return 2;
    -
    - return 1;
    -}
    -
    static int mark_lock_irq(struct task_struct *curr, struct held_lock *this,
    enum lock_usage_bit new_bit)
    {
    @@ -2168,7 +2142,10 @@ static int mark_lock_irq(struct task_str
    case LOCK_USED_IN_HARDIRQ:
    case LOCK_USED_IN_SOFTIRQ:
    case LOCK_USED_IN_RECLAIM_FS:
    - return mark_lock_irq_used_in(curr, this, new_bit);
    + 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:
    @@ -2178,11 +2155,6 @@ static int mark_lock_irq(struct task_str
    case LOCK_ENABLED_RECLAIM_FS_READ:
    return mark_lock_irq_read(curr, this, new_bit);

    - case LOCK_ENABLED_HARDIRQ:
    - case LOCK_ENABLED_SOFTIRQ:
    - case LOCK_ENABLED_RECLAIM_FS:
    - return mark_lock_irq_enabled(curr, this, new_bit);
    -
    default:
    WARN_ON(1);
    break;
    --



    \
     
     \ /
      Last update: 2009-01-28 15:05    [from the cache]
    ©2003-2014 Jasper Spaans. hosted at Digital Ocean