#!/bin/bash # # Copyright(c) 2012-2021 Intel Corporation # SPDX-License-Identifier: BSD-3-Clause-Clear # . $(dirname $3)/conf_framework check() { cur_name=$(basename $2) config_file_path=$1 if compile_module $cur_name "bio_start_io_acct(NULL)" "linux/blkdev.h" then echo $cur_name "1" >> $config_file_path elif compile_module $cur_name "generic_start_io_acct(NULL, 0, 0, NULL)" "linux/bio.h" then echo $cur_name "2" >> $config_file_path elif compile_module $cur_name "generic_start_io_acct(0, 0, NULL)" "linux/bio.h" then echo $cur_name "3" >> $config_file_path elif compile_module $cur_name "part_round_stats(1, 1)" "linux/genhd.h" then echo $cur_name "4" >> $config_file_path elif compile_module $cur_name "part_round_stats(NULL, 1, 1)" "linux/genhd.h" then echo $cur_name "5" >> $config_file_path else echo $cur_name "X" >> $config_file_path fi } apply() { case "$1" in "1") add_function " static inline unsigned long long cas_generic_start_io_acct( struct request_queue *q, struct bio *bio, struct hd_struct *part) { return bio_start_io_acct(bio); }" add_function " static inline void cas_generic_end_io_acct(struct request_queue *q, struct bio *bio, struct hd_struct *part, unsigned long start_time) { bio_end_io_acct(bio, start_time); }" ;; "2") add_function " static inline unsigned long long cas_generic_start_io_acct( struct request_queue *q, struct bio *bio, struct hd_struct *part) { generic_start_io_acct(q, bio_data_dir(bio), bio_sectors(bio), part); return jiffies; }" add_function " static inline void cas_generic_end_io_acct(struct request_queue *q, struct bio *bio, struct hd_struct *part, unsigned long start_time) { generic_end_io_acct(q, bio_data_dir(bio), part, start_time); }" ;; "3") add_function " static inline unsigned long long cas_generic_start_io_acct( struct request_queue *q, struct bio *bio, struct hd_struct *part) { generic_start_io_acct(bio_data_dir(bio), bio_sectors(bio), part); return jiffies; }" add_function " static inline void cas_generic_end_io_acct(struct request_queue *q, struct bio *bio, struct hd_struct *part, unsigned long start_time) { generic_end_io_acct(bio_data_dir(bio), part, start_time); }" ;; "4") add_function " static inline unsigned long long cas_generic_start_io_acct( struct request_queue *q, struct bio *bio, struct hd_struct *part) { int rw = bio_data_dir(bio); int cpu = part_stat_lock(); part_round_stats(cpu, part); part_stat_inc(cpu, part, ios[rw]); part_stat_add(cpu, part, sectors[rw], bio_sectors(bio)); part_inc_in_flight(part, rw); part_stat_unlock(); return jiffies; }" add_function " static inline void cas_generic_end_io_acct(struct request_queue *q, struct bio *bio, struct hd_struct *part, unsigned long start_time) { int rw = bio_data_dir(bio); unsigned long duration = jiffies - start_time; int cpu = part_stat_lock(); part_stat_add(cpu, part, ticks[rw], duration); part_round_stats(cpu, part); part_dec_in_flight(part, rw); part_stat_unlock(); }" ;; "5") add_function " static inline unsigned long long cas_generic_start_io_acct( struct request_queue *q, struct bio *bio, struct hd_struct *part) { int rw = bio_data_dir(bio); int cpu = part_stat_lock(); part_round_stats(NULL, cpu, part); part_stat_inc(cpu, part, ios[rw]); part_stat_add(cpu, part, sectors[rw], bio_sectors(bio)); part_inc_in_flight(NULL, part, rw); part_stat_unlock(); return jiffies; }" add_function " static inline void cas_generic_end_io_acct(struct request_queue *q, struct bio *bio, struct hd_struct *part, unsigned long start_time) { int rw = bio_data_dir(bio); unsigned long duration = jiffies - start_time; int cpu = part_stat_lock(); part_stat_add(cpu, part, ticks[rw], duration); part_round_stats(NULL, cpu, part); part_dec_in_flight(NULL, part, rw); part_stat_unlock(); }" ;; *) exit 1 esac } conf_run $@