cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

task_io_accounting_ops.h (2610B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Task I/O accounting operations
      4 */
      5#ifndef __TASK_IO_ACCOUNTING_OPS_INCLUDED
      6#define __TASK_IO_ACCOUNTING_OPS_INCLUDED
      7
      8#include <linux/sched.h>
      9
     10#ifdef CONFIG_TASK_IO_ACCOUNTING
     11static inline void task_io_account_read(size_t bytes)
     12{
     13	current->ioac.read_bytes += bytes;
     14}
     15
     16/*
     17 * We approximate number of blocks, because we account bytes only.
     18 * A 'block' is 512 bytes
     19 */
     20static inline unsigned long task_io_get_inblock(const struct task_struct *p)
     21{
     22	return p->ioac.read_bytes >> 9;
     23}
     24
     25static inline void task_io_account_write(size_t bytes)
     26{
     27	current->ioac.write_bytes += bytes;
     28}
     29
     30/*
     31 * We approximate number of blocks, because we account bytes only.
     32 * A 'block' is 512 bytes
     33 */
     34static inline unsigned long task_io_get_oublock(const struct task_struct *p)
     35{
     36	return p->ioac.write_bytes >> 9;
     37}
     38
     39static inline void task_io_account_cancelled_write(size_t bytes)
     40{
     41	current->ioac.cancelled_write_bytes += bytes;
     42}
     43
     44static inline void task_io_accounting_init(struct task_io_accounting *ioac)
     45{
     46	memset(ioac, 0, sizeof(*ioac));
     47}
     48
     49static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
     50						struct task_io_accounting *src)
     51{
     52	dst->read_bytes += src->read_bytes;
     53	dst->write_bytes += src->write_bytes;
     54	dst->cancelled_write_bytes += src->cancelled_write_bytes;
     55}
     56
     57#else
     58
     59static inline void task_io_account_read(size_t bytes)
     60{
     61}
     62
     63static inline unsigned long task_io_get_inblock(const struct task_struct *p)
     64{
     65	return 0;
     66}
     67
     68static inline void task_io_account_write(size_t bytes)
     69{
     70}
     71
     72static inline unsigned long task_io_get_oublock(const struct task_struct *p)
     73{
     74	return 0;
     75}
     76
     77static inline void task_io_account_cancelled_write(size_t bytes)
     78{
     79}
     80
     81static inline void task_io_accounting_init(struct task_io_accounting *ioac)
     82{
     83}
     84
     85static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
     86						struct task_io_accounting *src)
     87{
     88}
     89
     90#endif /* CONFIG_TASK_IO_ACCOUNTING */
     91
     92#ifdef CONFIG_TASK_XACCT
     93static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
     94						struct task_io_accounting *src)
     95{
     96	dst->rchar += src->rchar;
     97	dst->wchar += src->wchar;
     98	dst->syscr += src->syscr;
     99	dst->syscw += src->syscw;
    100}
    101#else
    102static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
    103						struct task_io_accounting *src)
    104{
    105}
    106#endif /* CONFIG_TASK_XACCT */
    107
    108static inline void task_io_accounting_add(struct task_io_accounting *dst,
    109						struct task_io_accounting *src)
    110{
    111	task_chr_io_accounting_add(dst, src);
    112	task_blk_io_accounting_add(dst, src);
    113}
    114#endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */