From 583deef8f6dd328b3203d9df953443c16ef818c8 Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Mon, 22 Jul 2019 14:02:16 +0200 Subject: [PATCH] configure: adapt to kernel 5.1 Signed-off-by: Michal Rakowski --- configure.d/1_blk_end_req.conf | 31 ++++++++++++++++ configure.d/1_blk_status.conf | 31 ++++++++++++++++ configure.d/1_munmap.conf | 23 ++++++++++-- configure.d/1_queue_flag_set.conf | 6 ++-- configure.d/1_queue_lock.conf | 38 ++++++++++++++++++++ modules/cas_cache/volume/vol_block_dev_top.c | 3 +- modules/cas_disk/exp_obj.c | 2 +- 7 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 configure.d/1_blk_end_req.conf create mode 100644 configure.d/1_blk_status.conf create mode 100644 configure.d/1_queue_lock.conf diff --git a/configure.d/1_blk_end_req.conf b/configure.d/1_blk_end_req.conf new file mode 100644 index 0000000..628a5cb --- /dev/null +++ b/configure.d/1_blk_end_req.conf @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Copyright(c) 2012-2019 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 "blk_end_request_all(NULL, 0)" "linux/blkdev.h" + then + echo $cur_name "1" >> $config_file_path + else + echo $cur_name "2" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_define "CAS_END_REQUEST_ALL blk_end_request_all" ;; + "2") + add_define "CAS_END_REQUEST_ALL blk_mq_end_request" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_blk_status.conf b/configure.d/1_blk_status.conf new file mode 100644 index 0000000..9887d23 --- /dev/null +++ b/configure.d/1_blk_status.conf @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Copyright(c) 2012-2019 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 "blk_status_t t" "linux/blk_types.h" + then + echo $cur_name "1" >> $config_file_path + else + echo $cur_name "2" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_define "CAS_BLK_STATUS_T blk_status_t" ;; + "2") + add_define "CAS_BLK_STATUS_T int" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_munmap.conf b/configure.d/1_munmap.conf index b6cff97..2de79fe 100644 --- a/configure.d/1_munmap.conf +++ b/configure.d/1_munmap.conf @@ -9,13 +9,17 @@ check() { cur_name=$(basename $2) config_file_path=$1 - if compile_module $cur_name "vm_munmap(0, 0)" "linux/mm.h" + if compile_module $cur_name "vm_munmap(0, 0); MAP_PRIVATE;" "linux/mm.h" then echo $cur_name "1" >> $config_file_path elif compile_module $cur_name "do_munmap(NULL, 0)" "linux/mm.h" then echo $cur_name "2" >> $config_file_path - else + elif compile_module $cur_name "vm_munmap(0, 0); MAP_PRIVATE;" "linux/mm.h"\ + "uapi/linux/mman.h" + then + echo $cur_name "3" >> $config_file_path + else echo $cur_name "X" >> $config_file_path fi } @@ -50,6 +54,21 @@ apply() { { return do_munmap(current->mm, start, len); }" ;; + "3") + add_function " +#include +#include + static inline unsigned long cas_vm_mmap(struct file *file, + unsigned long addr, unsigned long len) + { + return vm_mmap(file, addr, len, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, 0); + }" + add_function " + static inline int cas_vm_munmap(unsigned long start, size_t len) + { + return vm_munmap(start, len); + }" ;; *) exit 1 esac diff --git a/configure.d/1_queue_flag_set.conf b/configure.d/1_queue_flag_set.conf index 9308474..37bb826 100644 --- a/configure.d/1_queue_flag_set.conf +++ b/configure.d/1_queue_flag_set.conf @@ -20,11 +20,11 @@ check() { apply() { case "$1" in "1") - add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\ + add_define "CAS_QUEUE_FLAG_SET(flag, request_queue) \\ blk_queue_flag_set(flag, request_queue)" ;; "2") - add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\ - queue_flag_set_unlocked(flag, request_queue)" ;; + add_define "CAS_QUEUE_FLAG_SET(flag, request_queue) \\ + queue_flag_set(flag, request_queue)" ;; *) exit 1 esac diff --git a/configure.d/1_queue_lock.conf b/configure.d/1_queue_lock.conf new file mode 100644 index 0000000..590c209 --- /dev/null +++ b/configure.d/1_queue_lock.conf @@ -0,0 +1,38 @@ +#!/bin/bash +# +# Copyright(c) 2012-2019 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 "struct request_queue *q; spin_lock_irq(q->queue_lock);"\ + "linux/blkdev.h" + then + echo $cur_name "1" >> $config_file_path + elif compile_module $cur_name "struct request_queue *q; spin_lock_irq(&q->queue_lock);"\ + "linux/blkdev.h" + then + echo $cur_name "2" >> $config_file_path + else + echo $cur_name "X" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_define "CAS_QUEUE_SPIN_LOCK(q) spin_lock_irq(q->queue_lock)" + add_define "CAS_QUEUE_SPIN_UNLOCK(q) spin_unlock_irq(q->queue_lock)" ;; + "2") + add_define "CAS_QUEUE_SPIN_LOCK(q) spin_lock_irq(&q->queue_lock)" + add_define "CAS_QUEUE_SPIN_UNLOCK(q) spin_unlock_irq(&q->queue_lock)" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index f0daded..615d5a1 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -29,6 +29,7 @@ static inline bool _blockdev_can_handle_rq(struct request *rq) error = __LINE__; if (unlikely(rq->next_rq)) + if (unlikely(CAS_BIDI_RQ(rq))) error = __LINE__; if (error != 0) { @@ -686,7 +687,7 @@ static int _blockdev_prep_rq_fn(struct casdsk_disk *dsk, struct request_queue *q atomic64_inc(&bvol->pending_rqs); - return BLKPREP_OK; + return CAS_BLKPREP_OK; } static int _blockdev_prepare_queue(struct casdsk_disk *dsk, diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 17202f8..34cb6ee 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -77,7 +77,7 @@ static int _casdsk_exp_obj_prep_rq_fn(struct request_queue *q, struct request *r if (likely(dsk->exp_obj->ops && dsk->exp_obj->ops->prep_rq_fn)) return dsk->exp_obj->ops->prep_rq_fn(dsk, q, rq, dsk->private); else - return BLKPREP_OK; + return CAS_BLKPREP_OK; } static void _casdsk_exp_obj_request_fn(struct request_queue *q)