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

internal.h (3769B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* Internal definitions for network filesystem support
      3 *
      4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
      5 * Written by David Howells (dhowells@redhat.com)
      6 */
      7
      8#include <linux/netfs.h>
      9#include <linux/fscache.h>
     10#include <trace/events/netfs.h>
     11
     12#ifdef pr_fmt
     13#undef pr_fmt
     14#endif
     15
     16#define pr_fmt(fmt) "netfs: " fmt
     17
     18/*
     19 * buffered_read.c
     20 */
     21void netfs_rreq_unlock_folios(struct netfs_io_request *rreq);
     22
     23/*
     24 * io.c
     25 */
     26int netfs_begin_read(struct netfs_io_request *rreq, bool sync);
     27
     28/*
     29 * main.c
     30 */
     31extern unsigned int netfs_debug;
     32
     33/*
     34 * objects.c
     35 */
     36struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
     37					     struct file *file,
     38					     loff_t start, size_t len,
     39					     enum netfs_io_origin origin);
     40void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what);
     41void netfs_clear_subrequests(struct netfs_io_request *rreq, bool was_async);
     42void netfs_put_request(struct netfs_io_request *rreq, bool was_async,
     43		       enum netfs_rreq_ref_trace what);
     44struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq);
     45
     46static inline void netfs_see_request(struct netfs_io_request *rreq,
     47				     enum netfs_rreq_ref_trace what)
     48{
     49	trace_netfs_rreq_ref(rreq->debug_id, refcount_read(&rreq->ref), what);
     50}
     51
     52/*
     53 * stats.c
     54 */
     55#ifdef CONFIG_NETFS_STATS
     56extern atomic_t netfs_n_rh_readahead;
     57extern atomic_t netfs_n_rh_readpage;
     58extern atomic_t netfs_n_rh_rreq;
     59extern atomic_t netfs_n_rh_sreq;
     60extern atomic_t netfs_n_rh_download;
     61extern atomic_t netfs_n_rh_download_done;
     62extern atomic_t netfs_n_rh_download_failed;
     63extern atomic_t netfs_n_rh_download_instead;
     64extern atomic_t netfs_n_rh_read;
     65extern atomic_t netfs_n_rh_read_done;
     66extern atomic_t netfs_n_rh_read_failed;
     67extern atomic_t netfs_n_rh_zero;
     68extern atomic_t netfs_n_rh_short_read;
     69extern atomic_t netfs_n_rh_write;
     70extern atomic_t netfs_n_rh_write_begin;
     71extern atomic_t netfs_n_rh_write_done;
     72extern atomic_t netfs_n_rh_write_failed;
     73extern atomic_t netfs_n_rh_write_zskip;
     74
     75
     76static inline void netfs_stat(atomic_t *stat)
     77{
     78	atomic_inc(stat);
     79}
     80
     81static inline void netfs_stat_d(atomic_t *stat)
     82{
     83	atomic_dec(stat);
     84}
     85
     86#else
     87#define netfs_stat(x) do {} while(0)
     88#define netfs_stat_d(x) do {} while(0)
     89#endif
     90
     91/*
     92 * Miscellaneous functions.
     93 */
     94static inline bool netfs_is_cache_enabled(struct netfs_inode *ctx)
     95{
     96#if IS_ENABLED(CONFIG_FSCACHE)
     97	struct fscache_cookie *cookie = ctx->cache;
     98
     99	return fscache_cookie_valid(cookie) && cookie->cache_priv &&
    100		fscache_cookie_enabled(cookie);
    101#else
    102	return false;
    103#endif
    104}
    105
    106/*****************************************************************************/
    107/*
    108 * debug tracing
    109 */
    110#define dbgprintk(FMT, ...) \
    111	printk("[%-6.6s] "FMT"\n", current->comm, ##__VA_ARGS__)
    112
    113#define kenter(FMT, ...) dbgprintk("==> %s("FMT")", __func__, ##__VA_ARGS__)
    114#define kleave(FMT, ...) dbgprintk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
    115#define kdebug(FMT, ...) dbgprintk(FMT, ##__VA_ARGS__)
    116
    117#ifdef __KDEBUG
    118#define _enter(FMT, ...) kenter(FMT, ##__VA_ARGS__)
    119#define _leave(FMT, ...) kleave(FMT, ##__VA_ARGS__)
    120#define _debug(FMT, ...) kdebug(FMT, ##__VA_ARGS__)
    121
    122#elif defined(CONFIG_NETFS_DEBUG)
    123#define _enter(FMT, ...)			\
    124do {						\
    125	if (netfs_debug)			\
    126		kenter(FMT, ##__VA_ARGS__);	\
    127} while (0)
    128
    129#define _leave(FMT, ...)			\
    130do {						\
    131	if (netfs_debug)			\
    132		kleave(FMT, ##__VA_ARGS__);	\
    133} while (0)
    134
    135#define _debug(FMT, ...)			\
    136do {						\
    137	if (netfs_debug)			\
    138		kdebug(FMT, ##__VA_ARGS__);	\
    139} while (0)
    140
    141#else
    142#define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
    143#define _leave(FMT, ...) no_printk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
    144#define _debug(FMT, ...) no_printk(FMT, ##__VA_ARGS__)
    145#endif