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

util.h (6604B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
      4 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
      5 */
      6
      7#ifndef __UTIL_DOT_H__
      8#define __UTIL_DOT_H__
      9
     10#ifdef pr_fmt
     11#undef pr_fmt
     12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
     13#endif
     14
     15#include <linux/mempool.h>
     16
     17#include "incore.h"
     18
     19#define fs_emerg(fs, fmt, ...)						\
     20	pr_emerg("fsid=%s: " fmt, (fs)->sd_fsname, ##__VA_ARGS__)
     21#define fs_warn(fs, fmt, ...)						\
     22	pr_warn("fsid=%s: " fmt, (fs)->sd_fsname, ##__VA_ARGS__)
     23#define fs_err(fs, fmt, ...)						\
     24	pr_err("fsid=%s: " fmt, (fs)->sd_fsname, ##__VA_ARGS__)
     25#define fs_info(fs, fmt, ...)						\
     26	pr_info("fsid=%s: " fmt, (fs)->sd_fsname, ##__VA_ARGS__)
     27
     28void gfs2_assert_i(struct gfs2_sbd *sdp);
     29
     30#define gfs2_assert(sdp, assertion) \
     31do { \
     32	if (unlikely(!(assertion))) { \
     33		gfs2_assert_i(sdp); \
     34		BUG(); \
     35        } \
     36} while (0)
     37
     38
     39void gfs2_assert_withdraw_i(struct gfs2_sbd *sdp, char *assertion,
     40			    const char *function, char *file, unsigned int line,
     41			    bool delayed);
     42
     43#define gfs2_assert_withdraw(sdp, assertion) \
     44	({ \
     45		bool _bool = (assertion); \
     46		if (unlikely(!_bool)) \
     47			gfs2_assert_withdraw_i((sdp), #assertion, \
     48					__func__, __FILE__, __LINE__, false); \
     49		!_bool; \
     50	})
     51
     52#define gfs2_assert_withdraw_delayed(sdp, assertion) \
     53	({ \
     54		bool _bool = (assertion); \
     55		if (unlikely(!_bool)) \
     56			gfs2_assert_withdraw_i((sdp), #assertion, \
     57					__func__, __FILE__, __LINE__, true); \
     58		!_bool; \
     59	})
     60
     61void gfs2_assert_warn_i(struct gfs2_sbd *sdp, char *assertion,
     62			const char *function, char *file, unsigned int line);
     63
     64#define gfs2_assert_warn(sdp, assertion) \
     65	({ \
     66		bool _bool = (assertion); \
     67		if (unlikely(!_bool)) \
     68			gfs2_assert_warn_i((sdp), #assertion, \
     69					__func__, __FILE__, __LINE__); \
     70		!_bool; \
     71	})
     72
     73void gfs2_consist_i(struct gfs2_sbd *sdp,
     74		    const char *function, char *file, unsigned int line);
     75
     76#define gfs2_consist(sdp) \
     77gfs2_consist_i((sdp), __func__, __FILE__, __LINE__)
     78
     79
     80void gfs2_consist_inode_i(struct gfs2_inode *ip,
     81			  const char *function, char *file, unsigned int line);
     82
     83#define gfs2_consist_inode(ip) \
     84gfs2_consist_inode_i((ip), __func__, __FILE__, __LINE__)
     85
     86
     87void gfs2_consist_rgrpd_i(struct gfs2_rgrpd *rgd,
     88			  const char *function, char *file, unsigned int line);
     89
     90#define gfs2_consist_rgrpd(rgd) \
     91gfs2_consist_rgrpd_i((rgd), __func__, __FILE__, __LINE__)
     92
     93
     94int gfs2_meta_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
     95		       const char *type, const char *function,
     96		       char *file, unsigned int line);
     97
     98static inline int gfs2_meta_check(struct gfs2_sbd *sdp,
     99				    struct buffer_head *bh)
    100{
    101	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
    102	u32 magic = be32_to_cpu(mh->mh_magic);
    103	if (unlikely(magic != GFS2_MAGIC)) {
    104		fs_err(sdp, "Magic number missing at %llu\n",
    105		       (unsigned long long)bh->b_blocknr);
    106		return -EIO;
    107	}
    108	return 0;
    109}
    110
    111int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
    112			   u16 type, u16 t,
    113			   const char *function,
    114			   char *file, unsigned int line);
    115
    116static inline int gfs2_metatype_check_i(struct gfs2_sbd *sdp,
    117					struct buffer_head *bh,
    118					u16 type,
    119					const char *function,
    120					char *file, unsigned int line)
    121{
    122	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
    123	u32 magic = be32_to_cpu(mh->mh_magic);
    124	u16 t = be32_to_cpu(mh->mh_type);
    125	if (unlikely(magic != GFS2_MAGIC))
    126		return gfs2_meta_check_ii(sdp, bh, "magic number", function,
    127					  file, line);
    128        if (unlikely(t != type))
    129		return gfs2_metatype_check_ii(sdp, bh, type, t, function,
    130					      file, line);
    131	return 0;
    132}
    133
    134#define gfs2_metatype_check(sdp, bh, type) \
    135gfs2_metatype_check_i((sdp), (bh), (type), __func__, __FILE__, __LINE__)
    136
    137static inline void gfs2_metatype_set(struct buffer_head *bh, u16 type,
    138				     u16 format)
    139{
    140	struct gfs2_meta_header *mh;
    141	mh = (struct gfs2_meta_header *)bh->b_data;
    142	mh->mh_type = cpu_to_be32(type);
    143	mh->mh_format = cpu_to_be32(format);
    144}
    145
    146
    147int gfs2_io_error_i(struct gfs2_sbd *sdp, const char *function,
    148		    char *file, unsigned int line);
    149
    150extern int check_journal_clean(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd,
    151			       bool verbose);
    152extern int gfs2_freeze_lock(struct gfs2_sbd *sdp,
    153			    struct gfs2_holder *freeze_gh, int caller_flags);
    154extern void gfs2_freeze_unlock(struct gfs2_holder *freeze_gh);
    155
    156#define gfs2_io_error(sdp) \
    157gfs2_io_error_i((sdp), __func__, __FILE__, __LINE__)
    158
    159
    160void gfs2_io_error_bh_i(struct gfs2_sbd *sdp, struct buffer_head *bh,
    161			const char *function, char *file, unsigned int line,
    162			bool withdraw);
    163
    164#define gfs2_io_error_bh_wd(sdp, bh) \
    165gfs2_io_error_bh_i((sdp), (bh), __func__, __FILE__, __LINE__, true)
    166
    167#define gfs2_io_error_bh(sdp, bh) \
    168gfs2_io_error_bh_i((sdp), (bh), __func__, __FILE__, __LINE__, false)
    169
    170
    171extern struct kmem_cache *gfs2_glock_cachep;
    172extern struct kmem_cache *gfs2_glock_aspace_cachep;
    173extern struct kmem_cache *gfs2_inode_cachep;
    174extern struct kmem_cache *gfs2_bufdata_cachep;
    175extern struct kmem_cache *gfs2_rgrpd_cachep;
    176extern struct kmem_cache *gfs2_quotad_cachep;
    177extern struct kmem_cache *gfs2_qadata_cachep;
    178extern struct kmem_cache *gfs2_trans_cachep;
    179extern mempool_t *gfs2_page_pool;
    180extern struct workqueue_struct *gfs2_control_wq;
    181
    182static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
    183					   unsigned int *p)
    184{
    185	unsigned int x;
    186	spin_lock(&gt->gt_spin);
    187	x = *p;
    188	spin_unlock(&gt->gt_spin);
    189	return x;
    190}
    191
    192/**
    193 * gfs2_withdraw_delayed - withdraw as soon as possible without deadlocks
    194 * @sdp: the superblock
    195 */
    196static inline void gfs2_withdraw_delayed(struct gfs2_sbd *sdp)
    197{
    198	set_bit(SDF_WITHDRAWING, &sdp->sd_flags);
    199}
    200
    201/**
    202 * gfs2_withdrawn - test whether the file system is withdrawing or withdrawn
    203 * @sdp: the superblock
    204 */
    205static inline bool gfs2_withdrawn(struct gfs2_sbd *sdp)
    206{
    207	return test_bit(SDF_WITHDRAWN, &sdp->sd_flags) ||
    208		test_bit(SDF_WITHDRAWING, &sdp->sd_flags);
    209}
    210
    211/**
    212 * gfs2_withdrawing - check if a withdraw is pending
    213 * @sdp: the superblock
    214 */
    215static inline bool gfs2_withdrawing(struct gfs2_sbd *sdp)
    216{
    217	return test_bit(SDF_WITHDRAWING, &sdp->sd_flags) &&
    218	       !test_bit(SDF_WITHDRAWN, &sdp->sd_flags);
    219}
    220
    221static inline bool gfs2_withdraw_in_prog(struct gfs2_sbd *sdp)
    222{
    223	return test_bit(SDF_WITHDRAW_IN_PROG, &sdp->sd_flags);
    224}
    225
    226#define gfs2_tune_get(sdp, field) \
    227gfs2_tune_get_i(&(sdp)->sd_tune, &(sdp)->sd_tune.field)
    228
    229__printf(2, 3)
    230void gfs2_lm(struct gfs2_sbd *sdp, const char *fmt, ...);
    231int gfs2_withdraw(struct gfs2_sbd *sdp);
    232
    233#endif /* __UTIL_DOT_H__ */