/* SPDX-License-Identifier: GPL-2.0 */ 
 | 
/* 
 | 
 * This program is free software; you can redistribute it and/or modify 
 | 
 * it under the terms of the GNU General Public License as published by 
 | 
 * the Free Software Foundation; either version 2 of the License, or 
 | 
 * (at your option) any later version. 
 | 
 * 
 | 
 * This program is distributed in the hope that it will be useful, 
 | 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 | 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 | 
 * GNU General Public License for more details. 
 | 
 * 
 | 
 * Authors: Waiman Long <longman@redhat.com> 
 | 
 */ 
 | 
  
 | 
#ifndef __LOCKING_LOCK_EVENTS_H 
 | 
#define __LOCKING_LOCK_EVENTS_H 
 | 
  
 | 
enum lock_events { 
 | 
  
 | 
#include "lock_events_list.h" 
 | 
  
 | 
    lockevent_num,    /* Total number of lock event counts */ 
 | 
    LOCKEVENT_reset_cnts = lockevent_num, 
 | 
}; 
 | 
  
 | 
#ifdef CONFIG_LOCK_EVENT_COUNTS 
 | 
/* 
 | 
 * Per-cpu counters 
 | 
 */ 
 | 
DECLARE_PER_CPU(unsigned long, lockevents[lockevent_num]); 
 | 
  
 | 
/* 
 | 
 * Increment the statistical counters. use raw_cpu_inc() because of lower 
 | 
 * overhead and we don't care if we loose the occasional update. 
 | 
 */ 
 | 
static inline void __lockevent_inc(enum lock_events event, bool cond) 
 | 
{ 
 | 
    if (cond) 
 | 
        raw_cpu_inc(lockevents[event]); 
 | 
} 
 | 
  
 | 
#define lockevent_inc(ev)      __lockevent_inc(LOCKEVENT_ ##ev, true) 
 | 
#define lockevent_cond_inc(ev, c) __lockevent_inc(LOCKEVENT_ ##ev, c) 
 | 
  
 | 
static inline void __lockevent_add(enum lock_events event, int inc) 
 | 
{ 
 | 
    raw_cpu_add(lockevents[event], inc); 
 | 
} 
 | 
  
 | 
#define lockevent_add(ev, c)    __lockevent_add(LOCKEVENT_ ##ev, c) 
 | 
  
 | 
#else  /* CONFIG_LOCK_EVENT_COUNTS */ 
 | 
  
 | 
#define lockevent_inc(ev) 
 | 
#define lockevent_add(ev, c) 
 | 
#define lockevent_cond_inc(ev, c) 
 | 
  
 | 
#endif /* CONFIG_LOCK_EVENT_COUNTS */ 
 | 
#endif /* __LOCKING_LOCK_EVENTS_H */ 
 |