LCOV - code coverage report
Current view: top level - include/linux - part_stat.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 5 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_PART_STAT_H
       3             : #define _LINUX_PART_STAT_H
       4             : 
       5             : #include <linux/genhd.h>
       6             : 
       7             : struct disk_stats {
       8             :         u64 nsecs[NR_STAT_GROUPS];
       9             :         unsigned long sectors[NR_STAT_GROUPS];
      10             :         unsigned long ios[NR_STAT_GROUPS];
      11             :         unsigned long merges[NR_STAT_GROUPS];
      12             :         unsigned long io_ticks;
      13             :         local_t in_flight[2];
      14             : };
      15             : 
      16             : /*
      17             :  * Macros to operate on percpu disk statistics:
      18             :  *
      19             :  * {disk|part|all}_stat_{add|sub|inc|dec}() modify the stat counters and should
      20             :  * be called between disk_stat_lock() and disk_stat_unlock().
      21             :  *
      22             :  * part_stat_read() can be called at any time.
      23             :  */
      24             : #define part_stat_lock()        preempt_disable()
      25             : #define part_stat_unlock()      preempt_enable()
      26             : 
      27             : #define part_stat_get_cpu(part, field, cpu)                             \
      28             :         (per_cpu_ptr((part)->bd_stats, (cpu))->field)
      29             : 
      30             : #define part_stat_get(part, field)                                      \
      31             :         part_stat_get_cpu(part, field, smp_processor_id())
      32             : 
      33             : #define part_stat_read(part, field)                                     \
      34             : ({                                                                      \
      35             :         typeof((part)->bd_stats->field) res = 0;                  \
      36             :         unsigned int _cpu;                                              \
      37             :         for_each_possible_cpu(_cpu)                                     \
      38             :                 res += per_cpu_ptr((part)->bd_stats, _cpu)->field; \
      39             :         res;                                                            \
      40             : })
      41             : 
      42           0 : static inline void part_stat_set_all(struct block_device *part, int value)
      43             : {
      44           0 :         int i;
      45             : 
      46           0 :         for_each_possible_cpu(i)
      47           0 :                 memset(per_cpu_ptr(part->bd_stats, i), value,
      48             :                                 sizeof(struct disk_stats));
      49           0 : }
      50             : 
      51             : #define part_stat_read_accum(part, field)                               \
      52             :         (part_stat_read(part, field[STAT_READ]) +                       \
      53             :          part_stat_read(part, field[STAT_WRITE]) +                      \
      54             :          part_stat_read(part, field[STAT_DISCARD]))
      55             : 
      56             : #define __part_stat_add(part, field, addnd)                             \
      57             :         __this_cpu_add((part)->bd_stats->field, addnd)
      58             : 
      59             : #define part_stat_add(part, field, addnd)       do {                    \
      60             :         __part_stat_add((part), field, addnd);                          \
      61             :         if ((part)->bd_partno)                                               \
      62             :                 __part_stat_add(bdev_whole(part), field, addnd);        \
      63             : } while (0)
      64             : 
      65             : #define part_stat_dec(part, field)                                      \
      66             :         part_stat_add(part, field, -1)
      67             : #define part_stat_inc(part, field)                                      \
      68             :         part_stat_add(part, field, 1)
      69             : #define part_stat_sub(part, field, subnd)                               \
      70             :         part_stat_add(part, field, -subnd)
      71             : 
      72             : #define part_stat_local_dec(part, field)                                \
      73             :         local_dec(&(part_stat_get(part, field)))
      74             : #define part_stat_local_inc(part, field)                                \
      75             :         local_inc(&(part_stat_get(part, field)))
      76             : #define part_stat_local_read(part, field)                               \
      77             :         local_read(&(part_stat_get(part, field)))
      78             : #define part_stat_local_read_cpu(part, field, cpu)                      \
      79             :         local_read(&(part_stat_get_cpu(part, field, cpu)))
      80             : 
      81             : #endif /* _LINUX_PART_STAT_H */

Generated by: LCOV version 1.14