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

debug.h (4080B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (c) International Business Machines Corp., 2006
      4 *
      5 * Author: Artem Bityutskiy (Битюцкий Артём)
      6 */
      7
      8#ifndef __UBI_DEBUG_H__
      9#define __UBI_DEBUG_H__
     10
     11void ubi_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len);
     12void ubi_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr);
     13void ubi_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr);
     14
     15#include <linux/random.h>
     16
     17#define ubi_assert(expr)  do {                                               \
     18	if (unlikely(!(expr))) {                                             \
     19		pr_crit("UBI assert failed in %s at %u (pid %d)\n",          \
     20		       __func__, __LINE__, current->pid);                    \
     21		dump_stack();                                                \
     22	}                                                                    \
     23} while (0)
     24
     25#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a)                   \
     26		print_hex_dump(l, ps, pt, r, g, b, len, a)
     27
     28#define ubi_dbg_msg(type, fmt, ...) \
     29	pr_debug("UBI DBG " type " (pid %d): " fmt "\n", current->pid,       \
     30		 ##__VA_ARGS__)
     31
     32/* General debugging messages */
     33#define dbg_gen(fmt, ...) ubi_dbg_msg("gen", fmt, ##__VA_ARGS__)
     34/* Messages from the eraseblock association sub-system */
     35#define dbg_eba(fmt, ...) ubi_dbg_msg("eba", fmt, ##__VA_ARGS__)
     36/* Messages from the wear-leveling sub-system */
     37#define dbg_wl(fmt, ...)  ubi_dbg_msg("wl", fmt, ##__VA_ARGS__)
     38/* Messages from the input/output sub-system */
     39#define dbg_io(fmt, ...)  ubi_dbg_msg("io", fmt, ##__VA_ARGS__)
     40/* Initialization and build messages */
     41#define dbg_bld(fmt, ...) ubi_dbg_msg("bld", fmt, ##__VA_ARGS__)
     42
     43void ubi_dump_vol_info(const struct ubi_volume *vol);
     44void ubi_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx);
     45void ubi_dump_av(const struct ubi_ainf_volume *av);
     46void ubi_dump_aeb(const struct ubi_ainf_peb *aeb, int type);
     47void ubi_dump_mkvol_req(const struct ubi_mkvol_req *req);
     48int ubi_self_check_all_ff(struct ubi_device *ubi, int pnum, int offset,
     49			  int len);
     50int ubi_debugfs_init(void);
     51void ubi_debugfs_exit(void);
     52int ubi_debugfs_init_dev(struct ubi_device *ubi);
     53void ubi_debugfs_exit_dev(struct ubi_device *ubi);
     54
     55/**
     56 * ubi_dbg_is_bgt_disabled - if the background thread is disabled.
     57 * @ubi: UBI device description object
     58 *
     59 * Returns non-zero if the UBI background thread is disabled for testing
     60 * purposes.
     61 */
     62static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi)
     63{
     64	return ubi->dbg.disable_bgt;
     65}
     66
     67/**
     68 * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip.
     69 * @ubi: UBI device description object
     70 *
     71 * Returns non-zero if a bit-flip should be emulated, otherwise returns zero.
     72 */
     73static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi)
     74{
     75	if (ubi->dbg.emulate_bitflips)
     76		return !(prandom_u32() % 200);
     77	return 0;
     78}
     79
     80/**
     81 * ubi_dbg_is_write_failure - if it is time to emulate a write failure.
     82 * @ubi: UBI device description object
     83 *
     84 * Returns non-zero if a write failure should be emulated, otherwise returns
     85 * zero.
     86 */
     87static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi)
     88{
     89	if (ubi->dbg.emulate_io_failures)
     90		return !(prandom_u32() % 500);
     91	return 0;
     92}
     93
     94/**
     95 * ubi_dbg_is_erase_failure - if its time to emulate an erase failure.
     96 * @ubi: UBI device description object
     97 *
     98 * Returns non-zero if an erase failure should be emulated, otherwise returns
     99 * zero.
    100 */
    101static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi)
    102{
    103	if (ubi->dbg.emulate_io_failures)
    104		return !(prandom_u32() % 400);
    105	return 0;
    106}
    107
    108static inline int ubi_dbg_chk_io(const struct ubi_device *ubi)
    109{
    110	return ubi->dbg.chk_io;
    111}
    112
    113static inline int ubi_dbg_chk_gen(const struct ubi_device *ubi)
    114{
    115	return ubi->dbg.chk_gen;
    116}
    117
    118static inline int ubi_dbg_chk_fastmap(const struct ubi_device *ubi)
    119{
    120	return ubi->dbg.chk_fastmap;
    121}
    122
    123static inline void ubi_enable_dbg_chk_fastmap(struct ubi_device *ubi)
    124{
    125	ubi->dbg.chk_fastmap = 1;
    126}
    127
    128int ubi_dbg_power_cut(struct ubi_device *ubi, int caller);
    129#endif /* !__UBI_DEBUG_H__ */