#ifndef _LINUX_CODETAG_H
#define _LINUX_CODETAG_H
#include <linux/types.h>
struct codetag_iterator;
struct codetag_type;
struct codetag_module;
struct seq_buf;
struct module;
struct codetag { … } __aligned(…);
codetag_ref;
struct codetag_type_desc { … };
struct codetag_iterator { … };
#ifdef MODULE
#define CT_MODULE_NAME …
#else
#define CT_MODULE_NAME …
#endif
#define CODE_TAG_INIT …
void codetag_lock_module_list(struct codetag_type *cttype, bool lock);
bool codetag_trylock_module_list(struct codetag_type *cttype);
struct codetag_iterator codetag_get_ct_iter(struct codetag_type *cttype);
struct codetag *codetag_next_ct(struct codetag_iterator *iter);
void codetag_to_text(struct seq_buf *out, struct codetag *ct);
struct codetag_type *
codetag_register_type(const struct codetag_type_desc *desc);
#if defined(CONFIG_CODE_TAGGING) && defined(CONFIG_MODULES)
void codetag_load_module(struct module *mod);
bool codetag_unload_module(struct module *mod);
#else
static inline void codetag_load_module(struct module *mod) { … }
static inline bool codetag_unload_module(struct module *mod) { … }
#endif
#endif