lkml.org 
[lkml]   [2014]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 0/2] blk-mq: switch from preempt_disable/enable to get/put_cpu
On 2014-11-07 15:03, Paolo Bonzini wrote:
> blk-mq is using preempt_disable/enable in order to ensure that the
> queue runners are placed on the right CPU. This does not work with
> the RT patches, because __blk_mq_run_hw_queue takes a non-raw
> spinlock with the preemption-disabled region. If there is contention
> on the lock, this violates the rules for preemption-disabled regions.
>
> While this could be fixed easily within the RT patches just by doing
> migrate_disable/enable (note: this was not tested :)), we can do
> better. The first patch concentrates the preempt_disable/enable in
> a single place in blk_mq_run_hw_queue, and also avoids useless calls
> when the caller wants to start __blk_mq_run_hw_queue asynchronously.
> (There is already a call to __blk_mq_run_hw_queue that does not disable
> preemption in blk-flush.c; not coincidentially, it passes async=true).
>
> Once this is done, it is trivial to use get/put_cpu instead of
> preempt_disable/smp_processor_id/preempt_enable, which is what the
> second patch does. The RT patches then can change this to use
> get_cpu_light.
>
> With these changes (and the additional switch to get_cpu_light),
> virtio-blk can be used again with RT kernels.

These both look good. I'll double check and run through some testing,
then apply for 3.19 if it all passes.


--
Jens Axboe



\
 
 \ /
  Last update: 2014-11-10 04:41    [W:0.058 / U:1.232 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site