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

features.h (3539B)


      1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2#ifndef _BCACHE_FEATURES_H
      3#define _BCACHE_FEATURES_H
      4
      5#include <linux/kernel.h>
      6#include <linux/types.h>
      7
      8#include "bcache_ondisk.h"
      9
     10#define BCH_FEATURE_COMPAT		0
     11#define BCH_FEATURE_RO_COMPAT		1
     12#define BCH_FEATURE_INCOMPAT		2
     13#define BCH_FEATURE_TYPE_MASK		0x03
     14
     15/* Feature set definition */
     16/* Incompat feature set */
     17/* 32bit bucket size, obsoleted */
     18#define BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET		0x0001
     19/* real bucket size is (1 << bucket_size) */
     20#define BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE	0x0002
     21
     22#define BCH_FEATURE_COMPAT_SUPP		0
     23#define BCH_FEATURE_RO_COMPAT_SUPP	0
     24#define BCH_FEATURE_INCOMPAT_SUPP	(BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET| \
     25					 BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE)
     26
     27#define BCH_HAS_COMPAT_FEATURE(sb, mask) \
     28		((sb)->feature_compat & (mask))
     29#define BCH_HAS_RO_COMPAT_FEATURE(sb, mask) \
     30		((sb)->feature_ro_compat & (mask))
     31#define BCH_HAS_INCOMPAT_FEATURE(sb, mask) \
     32		((sb)->feature_incompat & (mask))
     33
     34#define BCH_FEATURE_COMPAT_FUNCS(name, flagname) \
     35static inline int bch_has_feature_##name(struct cache_sb *sb) \
     36{ \
     37	if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
     38		return 0; \
     39	return (((sb)->feature_compat & \
     40		BCH##_FEATURE_COMPAT_##flagname) != 0); \
     41} \
     42static inline void bch_set_feature_##name(struct cache_sb *sb) \
     43{ \
     44	(sb)->feature_compat |= \
     45		BCH##_FEATURE_COMPAT_##flagname; \
     46} \
     47static inline void bch_clear_feature_##name(struct cache_sb *sb) \
     48{ \
     49	(sb)->feature_compat &= \
     50		~BCH##_FEATURE_COMPAT_##flagname; \
     51}
     52
     53#define BCH_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
     54static inline int bch_has_feature_##name(struct cache_sb *sb) \
     55{ \
     56	if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
     57		return 0; \
     58	return (((sb)->feature_ro_compat & \
     59		BCH##_FEATURE_RO_COMPAT_##flagname) != 0); \
     60} \
     61static inline void bch_set_feature_##name(struct cache_sb *sb) \
     62{ \
     63	(sb)->feature_ro_compat |= \
     64		BCH##_FEATURE_RO_COMPAT_##flagname; \
     65} \
     66static inline void bch_clear_feature_##name(struct cache_sb *sb) \
     67{ \
     68	(sb)->feature_ro_compat &= \
     69		~BCH##_FEATURE_RO_COMPAT_##flagname; \
     70}
     71
     72#define BCH_FEATURE_INCOMPAT_FUNCS(name, flagname) \
     73static inline int bch_has_feature_##name(struct cache_sb *sb) \
     74{ \
     75	if (sb->version < BCACHE_SB_VERSION_CDEV_WITH_FEATURES) \
     76		return 0; \
     77	return (((sb)->feature_incompat & \
     78		BCH##_FEATURE_INCOMPAT_##flagname) != 0); \
     79} \
     80static inline void bch_set_feature_##name(struct cache_sb *sb) \
     81{ \
     82	(sb)->feature_incompat |= \
     83		BCH##_FEATURE_INCOMPAT_##flagname; \
     84} \
     85static inline void bch_clear_feature_##name(struct cache_sb *sb) \
     86{ \
     87	(sb)->feature_incompat &= \
     88		~BCH##_FEATURE_INCOMPAT_##flagname; \
     89}
     90
     91BCH_FEATURE_INCOMPAT_FUNCS(obso_large_bucket, OBSO_LARGE_BUCKET);
     92BCH_FEATURE_INCOMPAT_FUNCS(large_bucket, LOG_LARGE_BUCKET_SIZE);
     93
     94static inline bool bch_has_unknown_compat_features(struct cache_sb *sb)
     95{
     96	return ((sb->feature_compat & ~BCH_FEATURE_COMPAT_SUPP) != 0);
     97}
     98
     99static inline bool bch_has_unknown_ro_compat_features(struct cache_sb *sb)
    100{
    101	return ((sb->feature_ro_compat & ~BCH_FEATURE_RO_COMPAT_SUPP) != 0);
    102}
    103
    104static inline bool bch_has_unknown_incompat_features(struct cache_sb *sb)
    105{
    106	return ((sb->feature_incompat & ~BCH_FEATURE_INCOMPAT_SUPP) != 0);
    107}
    108
    109int bch_print_cache_set_feature_compat(struct cache_set *c, char *buf, int size);
    110int bch_print_cache_set_feature_ro_compat(struct cache_set *c, char *buf, int size);
    111int bch_print_cache_set_feature_incompat(struct cache_set *c, char *buf, int size);
    112
    113#endif