X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=block%2Fblk-softirq.c;h=58340d0cb23a82d40edf95b77874a5781d49bcdb;hb=e33f2d238e2e53e264c758c0849423a9308eb63e;hp=475fab809a80cce9eb5573fbb392597d8dd9b838;hpb=6124a4e430b64d1577438c8648c59e996d02e73e;p=~andy%2Flinux diff --git a/block/blk-softirq.c b/block/blk-softirq.c index 475fab809a8..58340d0cb23 100644 --- a/block/blk-softirq.c +++ b/block/blk-softirq.c @@ -124,6 +124,14 @@ void __blk_complete_request(struct request *req) } else ccpu = cpu; + /* + * If current CPU and requested CPU are in the same group, running + * softirq in current CPU. One might concern this is just like + * QUEUE_FLAG_SAME_FORCE, but actually not. blk_complete_request() is + * running in interrupt handler, and currently I/O controller doesn't + * support multiple interrupts, so current CPU is unique actually. This + * avoids IPI sending from current CPU to the first CPU of a group. + */ if (ccpu == cpu || ccpu == group_cpu) { struct list_head *list; do_local: