Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5154639imu; Tue, 13 Nov 2018 01:58:34 -0800 (PST) X-Google-Smtp-Source: AJdET5c7ZKRZ0X4WAANfIZ0AfvXZafqad6noWplH9vEUc5aO8jiJJ+5Qso3pVagS6FZVQcPXjJGx X-Received: by 2002:a63:ba19:: with SMTP id k25mr4102281pgf.194.1542103114380; Tue, 13 Nov 2018 01:58:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542103114; cv=none; d=google.com; s=arc-20160816; b=KBl1m8Q57hMWAwpaWy9YmRRw4UoMeE1o6X34PgQNBXQFjY15/Snfe3rS12mxDj0lur e6gsWeKN0bfSyO2poF6/3L9g29JNLXfS0gGBAW3TdOu8SdPyTy1vXQq/X443LYUlvDQ9 QzD6HJYzPb5qSu6BFd2VTgihuxNfJ/ickpmMUn7FwYsnwjGbPKH06rvPIa8+vyP9bzAI /hch4r9HMMXz36gIZqhd/OrEcYQ/U/BKYicFfqAUfDlfpFzv+m1r3xpVRkZoxkknO5Sg 41xqR6+cg+sicW8UKe3tO/Fpug5DEX9C0iET9TfmFs4EdddCuJSPpkycQ4P7wiNVyBFE 0Sew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=cH1NUSTPaeNFjjdGymczsoRVZoo+NNx1HDR8ByXFEBQ=; b=Aomn7Uq+0/HEAbhcxdktWTS22eB7VBPeuvacCXWVFP+82zzcdiiyFv3nuCTRot5MJ4 +8X/0pceK2Dyb255d09usse+5BGb5Jj7l6vP74WEqqfK2OlNRsvuwNN7VY31kXNG0RDk eJ5pTKfItitWiOjaUMdDKJBj32kTmYRxn/QLMOVQyeedxF3Wg3PFgG7Vn0YgAzifo1mM Yg+w/NC1WNyC9GD9AASDG3eqLo4595rRexsmbi0ZdCVaBjJu+/gVlHi2wTtD0zh1qCSr EO2E+lQawx9jACk01mmX+pL+tVc7a2SZdVUueC48stmmGKxUmqM2f8ZPxtgJGrwTr+ye DhIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=NOlvZ3P+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h34-v6si21262251pld.358.2018.11.13.01.58.17; Tue, 13 Nov 2018 01:58:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=NOlvZ3P+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731935AbeKMTzA (ORCPT + 99 others); Tue, 13 Nov 2018 14:55:00 -0500 Received: from userp2130.oracle.com ([156.151.31.86]:46264 "EHLO userp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731853AbeKMTy7 (ORCPT ); Tue, 13 Nov 2018 14:54:59 -0500 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id wAD9sBUH017578; Tue, 13 Nov 2018 09:57:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2018-07-02; bh=cH1NUSTPaeNFjjdGymczsoRVZoo+NNx1HDR8ByXFEBQ=; b=NOlvZ3P+k7qbnHJiRXrv7jB1gYZf+/dHgsumRDDtn3R+RF6gNpfyMkBDpgBtB3hNZGsW rJk6qNN/t1TtU7hkgYca37m6Yc4WYjLtsFBVrGomlLvdrqf0a9wzZakhFYTSqZdzhYEB oQKXLnMtbWiyTdqpJ32/LsFLacT17NI0D3Sg4hXfYLX/dTSLP7To704YAxLPD+K2/H9r J4+I6bZAcg/goC3PTtpH6iIGerUYWYnK/ZYgUU2fLa+5ukTH0OvxWVl2p4U9XyyXkJE2 klVXXPGZHOd+l1OKVezH8DcN/IwwZgTOygEgIAaIqZSntiK02CNKaQE7yxvn/bxu2X96 vQ== Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp2130.oracle.com with ESMTP id 2nnwg19fxr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 Nov 2018 09:57:36 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id wAD9vZ8h013900 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 Nov 2018 09:57:35 GMT Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id wAD9vZBG025573; Tue, 13 Nov 2018 09:57:35 GMT Received: from will-ThinkCentre-M93p.cn.oracle.com (/10.182.70.234) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 13 Nov 2018 01:57:34 -0800 From: Jianchao Wang To: axboe@kernel.dk Cc: ming.lei@redhat.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH V6 3/5] blk-mq: ensure hctx to be ran on mapped cpu when issue directly Date: Tue, 13 Nov 2018 17:56:54 +0800 Message-Id: <1542103016-21037-4-git-send-email-jianchao.w.wang@oracle.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1542103016-21037-1-git-send-email-jianchao.w.wang@oracle.com> References: <1542103016-21037-1-git-send-email-jianchao.w.wang@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9075 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=971 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1811130093 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When issue request directly and the task is migrated out of the original cpu where it allocates request, hctx could be ran on the cpu where it is not mapped. To fix this, - insert the request forcibly if BLK_MQ_F_BLOCKING is set. - check whether the current is mapped to the hctx, if not, insert forcibly. - invoke __blk_mq_issue_directly under preemption disabled. Signed-off-by: Jianchao Wang --- block/blk-mq.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 11c52bb..58f15cc 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1776,6 +1776,17 @@ static blk_status_t blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx, blk_status_t ret = BLK_STS_RESOURCE; int srcu_idx; + if (hctx->flags & BLK_MQ_F_BLOCKING) { + force = true; + goto out; + } + + if (unlikely(!cpumask_test_cpu(get_cpu(), hctx->cpumask))) { + put_cpu(); + force = true; + goto out; + } + hctx_lock(hctx, &srcu_idx); /* * hctx_lock is needed before checking quiesced flag. @@ -1808,7 +1819,8 @@ static blk_status_t blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx, out_unlock: hctx_unlock(hctx, srcu_idx); - + put_cpu(); +out: switch (ret) { case BLK_STS_OK: break; -- 2.7.4