192b5ebe0SKozlowski Mateusz /* SPDX-License-Identifier: BSD-3-Clause 2a6dbe372Spaul luse * Copyright (C) 2018 Intel Corporation. 392b5ebe0SKozlowski Mateusz * All rights reserved. 492b5ebe0SKozlowski Mateusz */ 592b5ebe0SKozlowski Mateusz 692b5ebe0SKozlowski Mateusz #ifndef FTL_DEBUG_H 792b5ebe0SKozlowski Mateusz #define FTL_DEBUG_H 892b5ebe0SKozlowski Mateusz 992b5ebe0SKozlowski Mateusz #include "ftl_internal.h" 1088d1c3a6SKozlowski Mateusz #include "ftl_band.h" 1192b5ebe0SKozlowski Mateusz #include "ftl_core.h" 1292b5ebe0SKozlowski Mateusz 1388d1c3a6SKozlowski Mateusz #if defined(DEBUG) 148fad5718SArtur Paszkiewicz void ftl_band_validate_md(struct ftl_band *band, ftl_band_validate_md_cb cb); 1588d1c3a6SKozlowski Mateusz void ftl_dev_dump_bands(struct spdk_ftl_dev *dev); 1666fe5f75SKozlowski Mateusz static inline void ftl_debug_inject_trim_error(void)17*106ad379SMateusz Kozlowskiftl_debug_inject_trim_error(void) 1866fe5f75SKozlowski Mateusz { 19*106ad379SMateusz Kozlowski static int trim_no = 0; 2066fe5f75SKozlowski Mateusz 21*106ad379SMateusz Kozlowski if (getenv("FTL_CRASH_ON_TRIM") && trim_no++ == 256) { 2266fe5f75SKozlowski Mateusz abort(); 2366fe5f75SKozlowski Mateusz } 2466fe5f75SKozlowski Mateusz } 2588d1c3a6SKozlowski Mateusz #else 268fad5718SArtur Paszkiewicz 278fad5718SArtur Paszkiewicz static void _validate_cb(void * ctx)288fad5718SArtur Paszkiewicz_validate_cb(void *ctx) 298fad5718SArtur Paszkiewicz { 308fad5718SArtur Paszkiewicz struct ftl_band *band = ctx; 318fad5718SArtur Paszkiewicz 328fad5718SArtur Paszkiewicz band->validate_cb(band, true); 338fad5718SArtur Paszkiewicz } 348fad5718SArtur Paszkiewicz 358fad5718SArtur Paszkiewicz static inline void ftl_band_validate_md(struct ftl_band * band,ftl_band_validate_md_cb cb)368fad5718SArtur Paszkiewiczftl_band_validate_md(struct ftl_band *band, ftl_band_validate_md_cb cb) 378fad5718SArtur Paszkiewicz { 388fad5718SArtur Paszkiewicz /* For release builds this is a NOP operation, but should still be asynchronous to keep the behavior consistent */ 398fad5718SArtur Paszkiewicz band->validate_cb = cb; 408fad5718SArtur Paszkiewicz spdk_thread_send_msg(band->dev->core_thread, _validate_cb, band); 418fad5718SArtur Paszkiewicz } 428fad5718SArtur Paszkiewicz 4388d1c3a6SKozlowski Mateusz static inline void ftl_dev_dump_bands(struct spdk_ftl_dev * dev)4488d1c3a6SKozlowski Mateuszftl_dev_dump_bands(struct spdk_ftl_dev *dev) 4588d1c3a6SKozlowski Mateusz { 4688d1c3a6SKozlowski Mateusz } 4766fe5f75SKozlowski Mateusz static inline void ftl_debug_inject_trim_error(void)48*106ad379SMateusz Kozlowskiftl_debug_inject_trim_error(void) 4966fe5f75SKozlowski Mateusz { 5066fe5f75SKozlowski Mateusz } 5188d1c3a6SKozlowski Mateusz #endif 5288d1c3a6SKozlowski Mateusz 5392b5ebe0SKozlowski Mateusz void ftl_dev_dump_stats(const struct spdk_ftl_dev *dev); 5492b5ebe0SKozlowski Mateusz 5592b5ebe0SKozlowski Mateusz #endif /* FTL_DEBUG_H */ 56