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

blockcheck.h (3272B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * blockcheck.h
      4 *
      5 * Checksum and ECC codes for the OCFS2 userspace library.
      6 *
      7 * Copyright (C) 2004, 2008 Oracle.  All rights reserved.
      8 */
      9
     10#ifndef OCFS2_BLOCKCHECK_H
     11#define OCFS2_BLOCKCHECK_H
     12
     13
     14/* Count errors and error correction from blockcheck.c */
     15struct ocfs2_blockcheck_stats {
     16	spinlock_t b_lock;
     17	u64 b_check_count;	/* Number of blocks we've checked */
     18	u64 b_failure_count;	/* Number of failed checksums */
     19	u64 b_recover_count;	/* Number of blocks fixed by ecc */
     20
     21	/*
     22	 * debugfs entries, used if this is passed to
     23	 * ocfs2_blockcheck_stats_debugfs_install()
     24	 */
     25	struct dentry *b_debug_dir;	/* Parent of the debugfs  files */
     26};
     27
     28
     29/* High level block API */
     30void ocfs2_compute_meta_ecc(struct super_block *sb, void *data,
     31			    struct ocfs2_block_check *bc);
     32int ocfs2_validate_meta_ecc(struct super_block *sb, void *data,
     33			    struct ocfs2_block_check *bc);
     34void ocfs2_compute_meta_ecc_bhs(struct super_block *sb,
     35				struct buffer_head **bhs, int nr,
     36				struct ocfs2_block_check *bc);
     37int ocfs2_validate_meta_ecc_bhs(struct super_block *sb,
     38				struct buffer_head **bhs, int nr,
     39				struct ocfs2_block_check *bc);
     40
     41/* Lower level API */
     42void ocfs2_block_check_compute(void *data, size_t blocksize,
     43			       struct ocfs2_block_check *bc);
     44int ocfs2_block_check_validate(void *data, size_t blocksize,
     45			       struct ocfs2_block_check *bc,
     46			       struct ocfs2_blockcheck_stats *stats);
     47void ocfs2_block_check_compute_bhs(struct buffer_head **bhs, int nr,
     48				   struct ocfs2_block_check *bc);
     49int ocfs2_block_check_validate_bhs(struct buffer_head **bhs, int nr,
     50				   struct ocfs2_block_check *bc,
     51				   struct ocfs2_blockcheck_stats *stats);
     52
     53/* Debug Initialization */
     54void ocfs2_blockcheck_stats_debugfs_install(struct ocfs2_blockcheck_stats *stats,
     55					    struct dentry *parent);
     56void ocfs2_blockcheck_stats_debugfs_remove(struct ocfs2_blockcheck_stats *stats);
     57
     58/*
     59 * Hamming code functions
     60 */
     61
     62/*
     63 * Encoding hamming code parity bits for a buffer.
     64 *
     65 * This is the low level encoder function.  It can be called across
     66 * multiple hunks just like the crc32 code.  'd' is the number of bits
     67 * _in_this_hunk_.  nr is the bit offset of this hunk.  So, if you had
     68 * two 512B buffers, you would do it like so:
     69 *
     70 * parity = ocfs2_hamming_encode(0, buf1, 512 * 8, 0);
     71 * parity = ocfs2_hamming_encode(parity, buf2, 512 * 8, 512 * 8);
     72 *
     73 * If you just have one buffer, use ocfs2_hamming_encode_block().
     74 */
     75u32 ocfs2_hamming_encode(u32 parity, void *data, unsigned int d,
     76			 unsigned int nr);
     77/*
     78 * Fix a buffer with a bit error.  The 'fix' is the original parity
     79 * xor'd with the parity calculated now.
     80 *
     81 * Like ocfs2_hamming_encode(), this can handle hunks.  nr is the bit
     82 * offset of the current hunk.  If bit to be fixed is not part of the
     83 * current hunk, this does nothing.
     84 *
     85 * If you only have one buffer, use ocfs2_hamming_fix_block().
     86 */
     87void ocfs2_hamming_fix(void *data, unsigned int d, unsigned int nr,
     88		       unsigned int fix);
     89
     90/* Convenience wrappers for a single buffer of data */
     91extern u32 ocfs2_hamming_encode_block(void *data, unsigned int blocksize);
     92extern void ocfs2_hamming_fix_block(void *data, unsigned int blocksize,
     93				    unsigned int fix);
     94#endif