Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp205081imm; Thu, 30 Aug 2018 11:57:36 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaZhyyTT2WVoOG9jlp4HHdHQTTfOkdPuyunuinAzcgOHL9w7TcicJmTeARNx+lUR62C9dlH X-Received: by 2002:a62:464f:: with SMTP id t76-v6mr11694341pfa.118.1535655456551; Thu, 30 Aug 2018 11:57:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535655456; cv=none; d=google.com; s=arc-20160816; b=OUijf58ch24PaYqC/+AwnPPCGv8pkeqkQxiTL7N2N4XhJ2/k6lF/uoGGvQoTPSb0s6 lwfmTvNe+geAs1dPahp8v8uy3DPaegSRlFoNOUL2xvfhFwhXKsBhcoQULS8GdKaFaDaR KdsYv8g8I/TAlO1SyIidX3gg5ov1XlDbfG40qPoEhD3g2FblzUxylSL2EjGdbmLcfa8k fmOBbMf1kwAG4TnflTp8ELlVCs2asVosEVxIQZT2ZmpBv9k5i6EZjxTyuDzVkdkScX5f aUshdXoH7O55sWqNlEm7MTlOtV7WmrRPg1HRmS88KIDHWy5nyU6UgsfIpeoLMWv9Z13s Hb6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:references:in-reply-to:message-id :date:cc:to:from:arc-authentication-results; bh=dZInxL8uuDv5iaB7cGHW0ZDsU7DXX1vfqZGSwQugcnQ=; b=QxlJetKOrpNTMGZqGva4RqYYBv/WEJTDwzExed0n4N36laLmqedGPJ8F+YNDKYjkBO /l2XUnIjkRKfZWMeF8UxGxkQycYwJ0SKcWL+ACMXTvE17iSofD0jbZouUDwZl6GRGifT xKbpPIE/sUo82HQYa73EvVqUDzuqS86C/NiJC1jrXmj+OdNKhWg+1aVFDY05DMOV69mq BJ2cNxrUcCPigmiG/D/laEr+zCnmf5GYJbDpgcvZzuI55sGTG07k5yb6u5q8icyIqYN/ ykGEBH4OW6A8KOo3KqtmFCkbq8ivKMrnZR5CeaHFhp4jCTEqCYeJkVKE8TyI9zkyJeux /9Tg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 198-v6si7678009pfz.119.2018.08.30.11.57.22; Thu, 30 Aug 2018 11:57:36 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728125AbeH3W66 (ORCPT + 99 others); Thu, 30 Aug 2018 18:58:58 -0400 Received: from ale.deltatee.com ([207.54.116.67]:40048 "EHLO ale.deltatee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727387AbeH3W5l (ORCPT ); Thu, 30 Aug 2018 18:57:41 -0400 Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31]) by ale.deltatee.com with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvS4t-0006Om-Nd; Thu, 30 Aug 2018 12:54:01 -0600 Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.89) (envelope-from ) id 1fvS4o-0000tZ-RG; Thu, 30 Aug 2018 12:53:54 -0600 From: Logan Gunthorpe To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, linux-rdma@vger.kernel.org, linux-nvdimm@lists.01.org, linux-block@vger.kernel.org Cc: Stephen Bates , Christoph Hellwig , Keith Busch , Sagi Grimberg , Bjorn Helgaas , Jason Gunthorpe , Max Gurtovoy , Dan Williams , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Benjamin Herrenschmidt , Alex Williamson , =?UTF-8?q?Christian=20K=C3=B6nig?= , Logan Gunthorpe Date: Thu, 30 Aug 2018 12:53:46 -0600 Message-Id: <20180830185352.3369-8-logang@deltatee.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180830185352.3369-1-logang@deltatee.com> References: <20180830185352.3369-1-logang@deltatee.com> X-SA-Exim-Connect-IP: 172.16.1.31 X-SA-Exim-Rcpt-To: linux-nvme@lists.infradead.org, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-rdma@vger.kernel.org, linux-block@vger.kernel.org, sbates@raithlin.com, hch@lst.de, sagi@grimberg.me, bhelgaas@google.com, jgg@mellanox.com, maxg@mellanox.com, keith.busch@intel.com, dan.j.williams@intel.com, benh@kernel.crashing.org, jglisse@redhat.com, alex.williamson@redhat.com, christian.koenig@amd.com, logang@deltatee.com X-SA-Exim-Mail-From: gunthorp@deltatee.com X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on ale.deltatee.com X-Spam-Level: X-Spam-Status: No, score=-8.7 required=5.0 tests=ALL_TRUSTED,BAYES_00, GREYLIST_ISWHITE,MYRULES_NO_TEXT autolearn=ham autolearn_force=no version=3.4.1 Subject: [PATCH v5 07/13] block: Add PCI P2P flag for request queue and check support for requests X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QUEUE_FLAG_PCI_P2P is introduced meaning a driver's request queue supports targeting P2P memory. When a request is submitted we check if PCI P2PDMA memory is assigned to the first page in the bio. If it is, we ensure the queue it's submitted to supports it, and enforce REQ_NOMERGE. Signed-off-by: Logan Gunthorpe --- block/blk-core.c | 14 ++++++++++++++ include/linux/blkdev.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/block/blk-core.c b/block/blk-core.c index dee56c282efb..cc0289c7b983 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -2264,6 +2264,20 @@ generic_make_request_checks(struct bio *bio) if ((bio->bi_opf & REQ_NOWAIT) && !queue_is_rq_based(q)) goto not_supported; + /* + * Ensure PCI P2PDMA memory is not used in requests to queues that + * have no support. This should never happen if the higher layers using + * P2PDMA do the right thing and use the proper P2PDMA client + * infrastructure. Also, ensure such requests use REQ_NOMERGE + * seeing requests can not mix P2PDMA and non-P2PDMA memory at + * this time. + */ + if (bio->bi_vcnt && is_pci_p2pdma_page(bio->bi_io_vec->bv_page)) { + if (WARN_ON_ONCE(!blk_queue_pci_p2pdma(q))) + goto not_supported; + bio->bi_opf |= REQ_NOMERGE; + } + if (should_fail_bio(bio)) goto end_io; diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d6869e0e2b64..7bf80ca802e1 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -699,6 +699,7 @@ struct request_queue { #define QUEUE_FLAG_SCSI_PASSTHROUGH 27 /* queue supports SCSI commands */ #define QUEUE_FLAG_QUIESCED 28 /* queue has been quiesced */ #define QUEUE_FLAG_PREEMPT_ONLY 29 /* only process REQ_PREEMPT requests */ +#define QUEUE_FLAG_PCI_P2PDMA 30 /* device supports pci p2p requests */ #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ (1 << QUEUE_FLAG_SAME_COMP) | \ @@ -731,6 +732,8 @@ bool blk_queue_flag_test_and_clear(unsigned int flag, struct request_queue *q); #define blk_queue_dax(q) test_bit(QUEUE_FLAG_DAX, &(q)->queue_flags) #define blk_queue_scsi_passthrough(q) \ test_bit(QUEUE_FLAG_SCSI_PASSTHROUGH, &(q)->queue_flags) +#define blk_queue_pci_p2pdma(q) \ + test_bit(QUEUE_FLAG_PCI_P2PDMA, &(q)->queue_flags) #define blk_noretry_request(rq) \ ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \ -- 2.11.0