Merge pull request #1632 from mmichal10/preemption
Disable preemption when accessing current cpu id
This commit is contained in:
commit
21d017d60b
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright(c) 2012-2022 Intel Corporation
|
* Copyright(c) 2012-2022 Intel Corporation
|
||||||
* Copyright(c) 2024 Huawei Technologies
|
* Copyright(c) 2024-2025 Huawei Technologies
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -73,6 +73,7 @@ static int _cas_cleaner_thread(void *data)
|
|||||||
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
||||||
struct cas_thread_info *info;
|
struct cas_thread_info *info;
|
||||||
uint32_t ms;
|
uint32_t ms;
|
||||||
|
ocf_queue_t queue;
|
||||||
|
|
||||||
BUG_ON(!c);
|
BUG_ON(!c);
|
||||||
|
|
||||||
@ -94,7 +95,10 @@ static int _cas_cleaner_thread(void *data)
|
|||||||
|
|
||||||
atomic_set(&info->kicked, 0);
|
atomic_set(&info->kicked, 0);
|
||||||
init_completion(&info->sync_compl);
|
init_completion(&info->sync_compl);
|
||||||
ocf_cleaner_run(c, cache_priv->io_queues[smp_processor_id()]);
|
get_cpu();
|
||||||
|
queue = cache_priv->io_queues[smp_processor_id()];
|
||||||
|
put_cpu();
|
||||||
|
ocf_cleaner_run(c, queue);
|
||||||
wait_for_completion(&info->sync_compl);
|
wait_for_completion(&info->sync_compl);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright(c) 2012-2022 Intel Corporation
|
* Copyright(c) 2012-2022 Intel Corporation
|
||||||
* Copyright(c) 2024 Huawei Technologies
|
* Copyright(c) 2024-2025 Huawei Technologies
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -208,9 +208,13 @@ void *cas_rpool_try_get(struct cas_reserve_pool *rpool_master, int *cpu)
|
|||||||
|
|
||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
|
|
||||||
|
get_cpu();
|
||||||
|
|
||||||
*cpu = smp_processor_id();
|
*cpu = smp_processor_id();
|
||||||
current_rpool = &rpool_master->rpools[*cpu];
|
current_rpool = &rpool_master->rpools[*cpu];
|
||||||
|
|
||||||
|
put_cpu();
|
||||||
|
|
||||||
spin_lock_irqsave(¤t_rpool->lock, flags);
|
spin_lock_irqsave(¤t_rpool->lock, flags);
|
||||||
|
|
||||||
if (!list_empty(¤t_rpool->list)) {
|
if (!list_empty(¤t_rpool->list)) {
|
||||||
|
@ -248,12 +248,16 @@ static int blkdev_handle_data_single(struct bd_object *bvol, struct bio *bio,
|
|||||||
{
|
{
|
||||||
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
||||||
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
||||||
ocf_queue_t queue = cache_priv->io_queues[smp_processor_id()];
|
ocf_queue_t queue;
|
||||||
ocf_io_t io;
|
ocf_io_t io;
|
||||||
struct blk_data *data;
|
struct blk_data *data;
|
||||||
uint64_t flags = CAS_BIO_OP_FLAGS(bio);
|
uint64_t flags = CAS_BIO_OP_FLAGS(bio);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
get_cpu();
|
||||||
|
queue = cache_priv->io_queues[smp_processor_id()];
|
||||||
|
put_cpu();
|
||||||
|
|
||||||
data = cas_alloc_blk_data(bio_segments(bio), GFP_NOIO);
|
data = cas_alloc_blk_data(bio_segments(bio), GFP_NOIO);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
CAS_PRINT_RL(KERN_CRIT "BIO data vector allocation error\n");
|
CAS_PRINT_RL(KERN_CRIT "BIO data vector allocation error\n");
|
||||||
@ -363,9 +367,13 @@ static void blkdev_handle_discard(struct bd_object *bvol, struct bio *bio)
|
|||||||
{
|
{
|
||||||
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
||||||
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
||||||
ocf_queue_t queue = cache_priv->io_queues[smp_processor_id()];
|
ocf_queue_t queue;
|
||||||
ocf_io_t io;
|
ocf_io_t io;
|
||||||
|
|
||||||
|
get_cpu();
|
||||||
|
queue = cache_priv->io_queues[smp_processor_id()];
|
||||||
|
put_cpu();
|
||||||
|
|
||||||
io = ocf_volume_new_io(bvol->front_volume, queue,
|
io = ocf_volume_new_io(bvol->front_volume, queue,
|
||||||
CAS_BIO_BISECTOR(bio) << SECTOR_SHIFT,
|
CAS_BIO_BISECTOR(bio) << SECTOR_SHIFT,
|
||||||
CAS_BIO_BISIZE(bio), OCF_WRITE, 0, 0);
|
CAS_BIO_BISIZE(bio), OCF_WRITE, 0, 0);
|
||||||
@ -411,9 +419,13 @@ static void blkdev_handle_flush(struct bd_object *bvol, struct bio *bio)
|
|||||||
{
|
{
|
||||||
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
ocf_cache_t cache = ocf_volume_get_cache(bvol->front_volume);
|
||||||
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
struct cache_priv *cache_priv = ocf_cache_get_priv(cache);
|
||||||
ocf_queue_t queue = cache_priv->io_queues[smp_processor_id()];
|
ocf_queue_t queue;
|
||||||
ocf_io_t io;
|
ocf_io_t io;
|
||||||
|
|
||||||
|
get_cpu();
|
||||||
|
queue = cache_priv->io_queues[smp_processor_id()];
|
||||||
|
put_cpu();
|
||||||
|
|
||||||
io = ocf_volume_new_io(bvol->front_volume, queue, 0, 0, OCF_WRITE, 0,
|
io = ocf_volume_new_io(bvol->front_volume, queue, 0, 0, OCF_WRITE, 0,
|
||||||
CAS_SET_FLUSH(0));
|
CAS_SET_FLUSH(0));
|
||||||
if (!io) {
|
if (!io) {
|
||||||
|
Loading…
Reference in New Issue
Block a user