From patchwork Wed Jul 5 18:57:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 9826933 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2E5E8602F0 for ; Wed, 5 Jul 2017 18:58:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 136F428577 for ; Wed, 5 Jul 2017 18:58:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E692D28582; Wed, 5 Jul 2017 18:58:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D4FB128577 for ; Wed, 5 Jul 2017 18:58:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751784AbdGES6D (ORCPT ); Wed, 5 Jul 2017 14:58:03 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:52833 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751700AbdGES6C (ORCPT ); Wed, 5 Jul 2017 14:58:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=In-Reply-To:Content-Type:MIME-Version :References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=c+fNuSNSHhCQRTIIyLcRADp9akOT1W16Bvgh+B88clo=; b=e2Y3rLYhi7i+EbEIp7yKt7//r ERHAo04KHeK81ZWxFfIOUtR5NP8BQnmCDrgfKUatlGqgZpiAr1AI+GIaLilzCEeDwUCiSDCpNIlf2 1xW++/DRKqp6oAPNKxGF8ybthtxSeEbBw3JcuKOlGAc+/hdUiiFuMLfCDqJyx59Rqs7R164sWHkwr ZF7OHCKdqZXxxtJPq+LBkYnmedB2WODXZqIY92SSfwr9FY0G+D2rffySA5GrrjS89G+LBZJ4PU/+J yTcZ/8/W2H6SRr3WTeGq9DicXn/4DNK3pskhGwDvEBM4nblpyKFR+aQ/27wWFCQUQ6ef4KCLKMSJO X2xI7pMAw==; Received: from hch by bombadil.infradead.org with local (Exim 4.87 #1 (Red Hat Linux)) id 1dSpUq-0008M9-Eo; Wed, 05 Jul 2017 18:57:56 +0000 Date: Wed, 5 Jul 2017 11:57:56 -0700 From: Christoph Hellwig To: Helge Deller Cc: Thomas Bogendoerfer , jejb@parisc-linux.org, linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] parisc: DMA API: return error instead of BUG_ON for dma ops on non dma devs Message-ID: <20170705185756.GA18087@infradead.org> References: <20170703084920.142A9508094@solo.franken.de> <83ff44f5-8989-c806-bef3-29fb9c909bee@gmx.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <83ff44f5-8989-c806-bef3-29fb9c909bee@gmx.de> User-Agent: Mutt/1.8.0 (2017-02-23) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP I've got a tree pending that removes DMA_ERROR_CODE, and it's been in linux-next for a while. While this won't compile-time conflict with this patch and will basically revert the effect. Can you please test the patch below and send it to Linus ASAP so that I can send the pull request for the dma-mapping tree? --- From 85942d54e2f0ad5f4b4e074ce2e271be17b31274 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Tue, 4 Jul 2017 19:55:06 -0700 Subject: parisc: ->mapping_error DMA_ERROR_CODE already went away in linux-next, but parisc unfortunately added a new instance of it without any review as far as I can tell. Move the two iommu drivers to report errors through ->mapping_error. Signed-off-by: Christoph Hellwig --- arch/parisc/include/asm/dma-mapping.h | 2 -- drivers/parisc/ccio-dma.c | 10 +++++++++- drivers/parisc/sba_iommu.c | 10 +++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/arch/parisc/include/asm/dma-mapping.h b/arch/parisc/include/asm/dma-mapping.h index 9a2a8956a695..2b16282add69 100644 --- a/arch/parisc/include/asm/dma-mapping.h +++ b/arch/parisc/include/asm/dma-mapping.h @@ -20,8 +20,6 @@ ** flush/purge and allocate "regular" cacheable pages for everything. */ -#define DMA_ERROR_CODE (~(dma_addr_t)0) - #ifdef CONFIG_PA11 extern const struct dma_map_ops pcxl_dma_ops; extern const struct dma_map_ops pcx_dma_ops; diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index 56c93f096de9..6aa1e7f6672f 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c @@ -110,6 +110,8 @@ #define CMD_TLB_DIRECT_WRITE 35 /* IO_COMMAND for I/O TLB Writes */ #define CMD_TLB_PURGE 33 /* IO_COMMAND to Purge I/O TLB entry */ +#define CCIO_MAPPING_ERROR (~(dma_addr_t)0) + struct ioa_registers { /* Runway Supervisory Set */ int32_t unused1[12]; @@ -742,7 +744,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size, BUG_ON(!dev); ioc = GET_IOC(dev); if (!ioc) - return DMA_ERROR_CODE; + return CCIO_MAPPING_ERROR; BUG_ON(size <= 0); @@ -1023,6 +1025,11 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, DBG_RUN_SG("%s() DONE (nents %d)\n", __func__, nents); } +static int ccio_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == CCIO_MAPPING_ERROR; +} + static const struct dma_map_ops ccio_ops = { .dma_supported = ccio_dma_supported, .alloc = ccio_alloc, @@ -1031,6 +1038,7 @@ static const struct dma_map_ops ccio_ops = { .unmap_page = ccio_unmap_page, .map_sg = ccio_map_sg, .unmap_sg = ccio_unmap_sg, + .mapping_error = ccio_mapping_error, }; #ifdef CONFIG_PROC_FS diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index 87ad5fd6a7a2..4086f79d58d5 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c @@ -93,6 +93,8 @@ #define DEFAULT_DMA_HINT_REG 0 +#define SBA_MAPPING_ERROR (~(dma_addr_t)0) + struct sba_device *sba_list; EXPORT_SYMBOL_GPL(sba_list); @@ -725,7 +727,7 @@ sba_map_single(struct device *dev, void *addr, size_t size, ioc = GET_IOC(dev); if (!ioc) - return DMA_ERROR_CODE; + return SBA_MAPPING_ERROR; /* save offset bits */ offset = ((dma_addr_t) (long) addr) & ~IOVP_MASK; @@ -1083,6 +1085,11 @@ sba_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, } +static int sba_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == SBA_MAPPING_ERROR; +} + static const struct dma_map_ops sba_ops = { .dma_supported = sba_dma_supported, .alloc = sba_alloc, @@ -1091,6 +1098,7 @@ static const struct dma_map_ops sba_ops = { .unmap_page = sba_unmap_page, .map_sg = sba_map_sg, .unmap_sg = sba_unmap_sg, + .mapping_error = sba_mapping_error, };