| /* 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) do { (void)(c); } while (0) | |
| #define lockevent_cond_inc(ev, c) do { (void)(c); } while (0) | |
| #endif /* CONFIG_LOCK_EVENT_COUNTS */ | |
| ssize_t lockevent_read(struct file *file, char __user *user_buf, | |
| size_t count, loff_t *ppos); | |
| #endif /* __LOCKING_LOCK_EVENTS_H */ |