Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * This program is free software; you can redistribute it and/or modify
0004  * it under the terms of the GNU General Public License as published by
0005  * the Free Software Foundation; either version 2 of the License, or
0006  * (at your option) any later version.
0007  *
0008  * This program is distributed in the hope that it will be useful,
0009  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0010  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0011  * GNU General Public License for more details.
0012  *
0013  * Authors: Waiman Long <longman@redhat.com>
0014  */
0015 
0016 #ifndef LOCK_EVENT
0017 #define LOCK_EVENT(name)    LOCKEVENT_ ## name,
0018 #endif
0019 
0020 #ifdef CONFIG_QUEUED_SPINLOCKS
0021 #ifdef CONFIG_PARAVIRT_SPINLOCKS
0022 /*
0023  * Locking events for PV qspinlock.
0024  */
0025 LOCK_EVENT(pv_hash_hops)    /* Average # of hops per hashing operation */
0026 LOCK_EVENT(pv_kick_unlock)  /* # of vCPU kicks issued at unlock time   */
0027 LOCK_EVENT(pv_kick_wake)    /* # of vCPU kicks for pv_latency_wake     */
0028 LOCK_EVENT(pv_latency_kick) /* Average latency (ns) of vCPU kick       */
0029 LOCK_EVENT(pv_latency_wake) /* Average latency (ns) of kick-to-wakeup  */
0030 LOCK_EVENT(pv_lock_stealing)    /* # of lock stealing operations       */
0031 LOCK_EVENT(pv_spurious_wakeup)  /* # of spurious wakeups in non-head vCPUs */
0032 LOCK_EVENT(pv_wait_again)   /* # of wait's after queue head vCPU kick  */
0033 LOCK_EVENT(pv_wait_early)   /* # of early vCPU wait's          */
0034 LOCK_EVENT(pv_wait_head)    /* # of vCPU wait's at the queue head      */
0035 LOCK_EVENT(pv_wait_node)    /* # of vCPU wait's at non-head queue node */
0036 #endif /* CONFIG_PARAVIRT_SPINLOCKS */
0037 
0038 /*
0039  * Locking events for qspinlock
0040  *
0041  * Subtracting lock_use_node[234] from lock_slowpath will give you
0042  * lock_use_node1.
0043  */
0044 LOCK_EVENT(lock_pending)    /* # of locking ops via pending code         */
0045 LOCK_EVENT(lock_slowpath)   /* # of locking ops via MCS lock queue       */
0046 LOCK_EVENT(lock_use_node2)  /* # of locking ops that use 2nd percpu node */
0047 LOCK_EVENT(lock_use_node3)  /* # of locking ops that use 3rd percpu node */
0048 LOCK_EVENT(lock_use_node4)  /* # of locking ops that use 4th percpu node */
0049 LOCK_EVENT(lock_no_node)    /* # of locking ops w/o using percpu node    */
0050 #endif /* CONFIG_QUEUED_SPINLOCKS */
0051 
0052 /*
0053  * Locking events for rwsem
0054  */
0055 LOCK_EVENT(rwsem_sleep_reader)  /* # of reader sleeps           */
0056 LOCK_EVENT(rwsem_sleep_writer)  /* # of writer sleeps           */
0057 LOCK_EVENT(rwsem_wake_reader)   /* # of reader wakeups          */
0058 LOCK_EVENT(rwsem_wake_writer)   /* # of writer wakeups          */
0059 LOCK_EVENT(rwsem_opt_lock)  /* # of opt-acquired write locks    */
0060 LOCK_EVENT(rwsem_opt_fail)  /* # of failed optspins         */
0061 LOCK_EVENT(rwsem_opt_nospin)    /* # of disabled optspins       */
0062 LOCK_EVENT(rwsem_rlock)     /* # of read locks acquired     */
0063 LOCK_EVENT(rwsem_rlock_steal)   /* # of read locks by lock stealing */
0064 LOCK_EVENT(rwsem_rlock_fast)    /* # of fast read locks acquired    */
0065 LOCK_EVENT(rwsem_rlock_fail)    /* # of failed read lock acquisitions   */
0066 LOCK_EVENT(rwsem_rlock_handoff) /* # of read lock handoffs      */
0067 LOCK_EVENT(rwsem_wlock)     /* # of write locks acquired        */
0068 LOCK_EVENT(rwsem_wlock_fail)    /* # of failed write lock acquisitions  */
0069 LOCK_EVENT(rwsem_wlock_handoff) /* # of write lock handoffs     */