From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Date: Thu, 08 Jun 2017 13:25:45 +0000 Subject: [PATCH 20/44] sparc: implement ->mapping_error Message-Id: <20170608132609.32662-21-hch@lst.de> List-Id: References: <20170608132609.32662-1-hch@lst.de> In-Reply-To: <20170608132609.32662-1-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: x86@kernel.org, linux-arm-kernel@lists.infradead.org, xen-devel@lists.xenproject.org, linux-c6x-dev@linux-c6x.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@linux-mips.org, openrisc@lists.librecores.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, dmaengine@vger.kernel.org, linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, iommu@lists.linux-foundation.org, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org DMA_ERROR_CODE is going to go away, so don't rely on it. Signed-off-by: Christoph Hellwig --- arch/sparc/include/asm/dma-mapping.h | 2 -- arch/sparc/kernel/iommu.c | 12 +++++++++--- arch/sparc/kernel/iommu_common.h | 2 ++ arch/sparc/kernel/pci_sun4v.c | 14 ++++++++++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h index 69cc627779f2..b8e8dfcd065d 100644 --- a/arch/sparc/include/asm/dma-mapping.h +++ b/arch/sparc/include/asm/dma-mapping.h @@ -5,8 +5,6 @@ #include #include -#define DMA_ERROR_CODE (~(dma_addr_t)0x0) - #define HAVE_ARCH_DMA_SUPPORTED 1 int dma_supported(struct device *dev, u64 mask); diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index c63ba99ca551..dafa316d978d 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c @@ -314,7 +314,7 @@ static dma_addr_t dma_4u_map_page(struct device *dev, struct page *page, bad_no_ctx: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void strbuf_flush(struct strbuf *strbuf, struct iommu *iommu, @@ -547,7 +547,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -573,7 +573,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(&iommu->tbl, vaddr, npages, IOMMU_ERROR_CODE); - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s = outs) @@ -741,6 +741,11 @@ static void dma_4u_sync_sg_for_cpu(struct device *dev, spin_unlock_irqrestore(&iommu->lock, flags); } +static int dma_4u_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr = SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4u_dma_ops = { .alloc = dma_4u_alloc_coherent, .free = dma_4u_free_coherent, @@ -750,6 +755,7 @@ static const struct dma_map_ops sun4u_dma_ops = { .unmap_sg = dma_4u_unmap_sg, .sync_single_for_cpu = dma_4u_sync_single_for_cpu, .sync_sg_for_cpu = dma_4u_sync_sg_for_cpu, + .mapping_error = dma_4u_mapping_error, }; const struct dma_map_ops *dma_ops = &sun4u_dma_ops; diff --git a/arch/sparc/kernel/iommu_common.h b/arch/sparc/kernel/iommu_common.h index 828493329f68..5ea5c192b1d9 100644 --- a/arch/sparc/kernel/iommu_common.h +++ b/arch/sparc/kernel/iommu_common.h @@ -47,4 +47,6 @@ static inline int is_span_boundary(unsigned long entry, return iommu_is_span_boundary(entry, nr, shift, boundary_size); } +#define SPARC_MAPPING_ERROR (~(dma_addr_t)0x0) + #endif /* _IOMMU_COMMON_H */ diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index 68bec7c97cb8..8e2a56f4c03a 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c @@ -412,12 +412,12 @@ static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page, bad: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; iommu_map_fail: local_irq_restore(flags); iommu_tbl_range_free(tbl, bus_addr, npages, IOMMU_ERROR_CODE); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void dma_4v_unmap_page(struct device *dev, dma_addr_t bus_addr, @@ -590,7 +590,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -607,7 +607,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(tbl, vaddr, npages, IOMMU_ERROR_CODE); /* XXX demap? XXX */ - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s = outs) @@ -669,6 +669,11 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, local_irq_restore(flags); } +static int dma_4v_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr = SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4v_dma_ops = { .alloc = dma_4v_alloc_coherent, .free = dma_4v_free_coherent, @@ -676,6 +681,7 @@ static const struct dma_map_ops sun4v_dma_ops = { .unmap_page = dma_4v_unmap_page, .map_sg = dma_4v_map_sg, .unmap_sg = dma_4v_unmap_sg, + .mapping_error = dma_4v_mapping_error, }; static void pci_sun4v_scan_bus(struct pci_pbm_info *pbm, struct device *parent) -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 20/44] sparc: implement ->mapping_error Date: Thu, 8 Jun 2017 15:25:45 +0200 Message-ID: <20170608132609.32662-21-hch@lst.de> References: <20170608132609.32662-1-hch@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170608132609.32662-1-hch@lst.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: x86@kernel.org, linux-arm-kernel@lists.infradead.org, xen-devel@lists.xenproject.org, linux-c6x-dev@linux-c6x.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@linux-mips.org, openrisc@lists.librecores.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, dmaengine@vger.kernel.org, linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, iommu@lists.linux-foundation.org, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org RE1BX0VSUk9SX0NPREUgaXMgZ29pbmcgdG8gZ28gYXdheSwgc28gZG9uJ3QgcmVseSBvbiBpdC4K ClNpZ25lZC1vZmYtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgotLS0KIGFyY2gv c3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCB8ICAyIC0tCiBhcmNoL3NwYXJjL2tlcm5l bC9pb21tdS5jICAgICAgICAgICAgfCAxMiArKysrKysrKystLS0KIGFyY2gvc3BhcmMva2VybmVs L2lvbW11X2NvbW1vbi5oICAgICB8ICAyICsrCiBhcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYu YyAgICAgICAgfCAxNCArKysrKysrKysrLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRp b25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9h c20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApp bmRleCA2OWNjNjI3Nzc5ZjIuLmI4ZThkZmNkMDY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9p bmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1h LW1hcHBpbmcuaApAQCAtNSw4ICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1 ZGUgPGxpbnV4L2RtYS1kZWJ1Zy5oPgogCi0jZGVmaW5lIERNQV9FUlJPUl9DT0RFCSh+KGRtYV9h ZGRyX3QpMHgwKQotCiAjZGVmaW5lIEhBVkVfQVJDSF9ETUFfU1VQUE9SVEVEIDEKIGludCBkbWFf c3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwogCmRpZmYgLS1naXQgYS9h cmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwppbmRl eCBjNjNiYTk5Y2E1NTEuLmRhZmEzMTZkOTc4ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJu ZWwvaW9tbXUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCkBAIC0zMTQsNyArMzE0 LDcgQEAgc3RhdGljIGRtYV9hZGRyX3QgZG1hXzR1X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IHBhZ2UgKnBhZ2UsCiBiYWRfbm9fY3R4OgogCWlmIChwcmludGtfcmF0ZWxpbWl0 KCkpCiAJCVdBUk5fT04oMSk7Ci0JcmV0dXJuIERNQV9FUlJPUl9DT0RFOworCXJldHVybiBTUEFS Q19NQVBQSU5HX0VSUk9SOwogfQogCiBzdGF0aWMgdm9pZCBzdHJidWZfZmx1c2goc3RydWN0IHN0 cmJ1ZiAqc3RyYnVmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11LApAQCAtNTQ3LDcgKzU0Nyw3IEBAIHN0 YXRpYyBpbnQgZG1hXzR1X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVy bGlzdCAqc2dsaXN0LAogCiAJaWYgKG91dGNvdW50IDwgaW5jb3VudCkgewogCQlvdXRzID0gc2df bmV4dChvdXRzKTsKLQkJb3V0cy0+ZG1hX2FkZHJlc3MgPSBETUFfRVJST1JfQ09ERTsKKwkJb3V0 cy0+ZG1hX2FkZHJlc3MgPSBTUEFSQ19NQVBQSU5HX0VSUk9SOwogCQlvdXRzLT5kbWFfbGVuZ3Ro ID0gMDsKIAl9CiAKQEAgLTU3Myw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IGRtYV80dV9tYXBfc2co c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCWlvbW11 X3RibF9yYW5nZV9mcmVlKCZpb21tdS0+dGJsLCB2YWRkciwgbnBhZ2VzLAogCQkJCQkgICAgIElP TU1VX0VSUk9SX0NPREUpOwogCi0JCQlzLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwor CQkJcy0+ZG1hX2FkZHJlc3MgPSBTUEFSQ19NQVBQSU5HX0VSUk9SOwogCQkJcy0+ZG1hX2xlbmd0 aCA9IDA7CiAJCX0KIAkJaWYgKHMgPT0gb3V0cykKQEAgLTc0MSw2ICs3NDEsMTEgQEAgc3RhdGlj IHZvaWQgZG1hXzR1X3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBk bWFfNHVfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2Fk ZHIpCit7CisJcmV0dXJuIGRtYV9hZGRyID09IFNQQVJDX01BUFBJTkdfRVJST1I7Cit9CisKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgc3VuNHVfZG1hX29wcyA9IHsKIAkuYWxsb2MJ CQk9IGRtYV80dV9hbGxvY19jb2hlcmVudCwKIAkuZnJlZQkJCT0gZG1hXzR1X2ZyZWVfY29oZXJl bnQsCkBAIC03NTAsNiArNzU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyBz dW40dV9kbWFfb3BzID0gewogCS51bm1hcF9zZwkJPSBkbWFfNHVfdW5tYXBfc2csCiAJLnN5bmNf c2luZ2xlX2Zvcl9jcHUJPSBkbWFfNHVfc3luY19zaW5nbGVfZm9yX2NwdSwKIAkuc3luY19zZ19m b3JfY3B1CT0gZG1hXzR1X3N5bmNfc2dfZm9yX2NwdSwKKwkubWFwcGluZ19lcnJvcgkJPSBkbWFf NHVfbWFwcGluZ19lcnJvciwKIH07CiAKIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29w cyA9ICZzdW40dV9kbWFfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXVf Y29tbW9uLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdV9jb21tb24uaAppbmRleCA4Mjg0OTMz MjlmNjguLjVlYTVjMTkyYjFkOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXVf Y29tbW9uLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXVfY29tbW9uLmgKQEAgLTQ3LDQg KzQ3LDYgQEAgc3RhdGljIGlubGluZSBpbnQgaXNfc3Bhbl9ib3VuZGFyeSh1bnNpZ25lZCBsb25n IGVudHJ5LAogCXJldHVybiBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KGVudHJ5LCBuciwgc2hpZnQs IGJvdW5kYXJ5X3NpemUpOwogfQogCisjZGVmaW5lIFNQQVJDX01BUFBJTkdfRVJST1IJKH4oZG1h X2FkZHJfdCkweDApCisKICNlbmRpZiAvKiBfSU9NTVVfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBh L2FyY2gvc3BhcmMva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3N1 bjR2LmMKaW5kZXggNjhiZWM3Yzk3Y2I4Li44ZTJhNTZmNGMwM2EgMTAwNjQ0Ci0tLSBhL2FyY2gv c3BhcmMva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zdW40 di5jCkBAIC00MTIsMTIgKzQxMiwxMiBAQCBzdGF0aWMgZG1hX2FkZHJfdCBkbWFfNHZfbWFwX3Bh Z2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIGJhZDoKIAlpZiAocHJp bnRrX3JhdGVsaW1pdCgpKQogCQlXQVJOX09OKDEpOwotCXJldHVybiBETUFfRVJST1JfQ09ERTsK KwlyZXR1cm4gU1BBUkNfTUFQUElOR19FUlJPUjsKIAogaW9tbXVfbWFwX2ZhaWw6CiAJbG9jYWxf aXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWlvbW11X3RibF9yYW5nZV9mcmVlKHRibCwgYnVzX2FkZHIs IG5wYWdlcywgSU9NTVVfRVJST1JfQ09ERSk7Ci0JcmV0dXJuIERNQV9FUlJPUl9DT0RFOworCXJl dHVybiBTUEFSQ19NQVBQSU5HX0VSUk9SOwogfQogCiBzdGF0aWMgdm9pZCBkbWFfNHZfdW5tYXBf cGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCkBAIC01OTAsNyAr NTkwLDcgQEAgc3RhdGljIGludCBkbWFfNHZfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAKIAlpZiAob3V0Y291bnQgPCBpbmNvdW50KSB7CiAJ CW91dHMgPSBzZ19uZXh0KG91dHMpOwotCQlvdXRzLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9D T0RFOworCQlvdXRzLT5kbWFfYWRkcmVzcyA9IFNQQVJDX01BUFBJTkdfRVJST1I7CiAJCW91dHMt PmRtYV9sZW5ndGggPSAwOwogCX0KIApAQCAtNjA3LDcgKzYwNyw3IEBAIHN0YXRpYyBpbnQgZG1h XzR2X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0 LAogCQkJaW9tbXVfdGJsX3JhbmdlX2ZyZWUodGJsLCB2YWRkciwgbnBhZ2VzLAogCQkJCQkgICAg IElPTU1VX0VSUk9SX0NPREUpOwogCQkJLyogWFhYIGRlbWFwPyBYWFggKi8KLQkJCXMtPmRtYV9h ZGRyZXNzID0gRE1BX0VSUk9SX0NPREU7CisJCQlzLT5kbWFfYWRkcmVzcyA9IFNQQVJDX01BUFBJ TkdfRVJST1I7CiAJCQlzLT5kbWFfbGVuZ3RoID0gMDsKIAkJfQogCQlpZiAocyA9PSBvdXRzKQpA QCAtNjY5LDYgKzY2OSwxMSBAQCBzdGF0aWMgdm9pZCBkbWFfNHZfdW5tYXBfc2coc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAlsb2NhbF9pcnFfcmVzdG9y ZShmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZG1hXzR2X21hcHBpbmdfZXJyb3Ioc3RydWN0IGRl dmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiBkbWFfYWRkciA9PSBT UEFSQ19NQVBQSU5HX0VSUk9SOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9tYXBfb3Bz IHN1bjR2X2RtYV9vcHMgPSB7CiAJLmFsbG9jCQkJCT0gZG1hXzR2X2FsbG9jX2NvaGVyZW50LAog CS5mcmVlCQkJCT0gZG1hXzR2X2ZyZWVfY29oZXJlbnQsCkBAIC02NzYsNiArNjgxLDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyBzdW40dl9kbWFfb3BzID0gewogCS51bm1hcF9w YWdlCQkJPSBkbWFfNHZfdW5tYXBfcGFnZSwKIAkubWFwX3NnCQkJCT0gZG1hXzR2X21hcF9zZywK IAkudW5tYXBfc2cJCQk9IGRtYV80dl91bm1hcF9zZywKKwkubWFwcGluZ19lcnJvcgkJCT0gZG1h XzR2X21hcHBpbmdfZXJyb3IsCiB9OwogCiBzdGF0aWMgdm9pZCBwY2lfc3VuNHZfc2Nhbl9idXMo c3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCi0tIAoyLjEx LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752082AbdFHNiU (ORCPT ); Thu, 8 Jun 2017 09:38:20 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:48871 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751941AbdFHN1j (ORCPT ); Thu, 8 Jun 2017 09:27:39 -0400 From: Christoph Hellwig To: x86@kernel.org, linux-arm-kernel@lists.infradead.org, xen-devel@lists.xenproject.org, linux-c6x-dev@linux-c6x.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-mips@linux-mips.org, openrisc@lists.librecores.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, dmaengine@vger.kernel.org, linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, iommu@lists.linux-foundation.org, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH 20/44] sparc: implement ->mapping_error Date: Thu, 8 Jun 2017 15:25:45 +0200 Message-Id: <20170608132609.32662-21-hch@lst.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170608132609.32662-1-hch@lst.de> References: <20170608132609.32662-1-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DMA_ERROR_CODE is going to go away, so don't rely on it. Signed-off-by: Christoph Hellwig --- arch/sparc/include/asm/dma-mapping.h | 2 -- arch/sparc/kernel/iommu.c | 12 +++++++++--- arch/sparc/kernel/iommu_common.h | 2 ++ arch/sparc/kernel/pci_sun4v.c | 14 ++++++++++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h index 69cc627779f2..b8e8dfcd065d 100644 --- a/arch/sparc/include/asm/dma-mapping.h +++ b/arch/sparc/include/asm/dma-mapping.h @@ -5,8 +5,6 @@ #include #include -#define DMA_ERROR_CODE (~(dma_addr_t)0x0) - #define HAVE_ARCH_DMA_SUPPORTED 1 int dma_supported(struct device *dev, u64 mask); diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index c63ba99ca551..dafa316d978d 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c @@ -314,7 +314,7 @@ static dma_addr_t dma_4u_map_page(struct device *dev, struct page *page, bad_no_ctx: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void strbuf_flush(struct strbuf *strbuf, struct iommu *iommu, @@ -547,7 +547,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -573,7 +573,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(&iommu->tbl, vaddr, npages, IOMMU_ERROR_CODE); - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s == outs) @@ -741,6 +741,11 @@ static void dma_4u_sync_sg_for_cpu(struct device *dev, spin_unlock_irqrestore(&iommu->lock, flags); } +static int dma_4u_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4u_dma_ops = { .alloc = dma_4u_alloc_coherent, .free = dma_4u_free_coherent, @@ -750,6 +755,7 @@ static const struct dma_map_ops sun4u_dma_ops = { .unmap_sg = dma_4u_unmap_sg, .sync_single_for_cpu = dma_4u_sync_single_for_cpu, .sync_sg_for_cpu = dma_4u_sync_sg_for_cpu, + .mapping_error = dma_4u_mapping_error, }; const struct dma_map_ops *dma_ops = &sun4u_dma_ops; diff --git a/arch/sparc/kernel/iommu_common.h b/arch/sparc/kernel/iommu_common.h index 828493329f68..5ea5c192b1d9 100644 --- a/arch/sparc/kernel/iommu_common.h +++ b/arch/sparc/kernel/iommu_common.h @@ -47,4 +47,6 @@ static inline int is_span_boundary(unsigned long entry, return iommu_is_span_boundary(entry, nr, shift, boundary_size); } +#define SPARC_MAPPING_ERROR (~(dma_addr_t)0x0) + #endif /* _IOMMU_COMMON_H */ diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index 68bec7c97cb8..8e2a56f4c03a 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c @@ -412,12 +412,12 @@ static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page, bad: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; iommu_map_fail: local_irq_restore(flags); iommu_tbl_range_free(tbl, bus_addr, npages, IOMMU_ERROR_CODE); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void dma_4v_unmap_page(struct device *dev, dma_addr_t bus_addr, @@ -590,7 +590,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -607,7 +607,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(tbl, vaddr, npages, IOMMU_ERROR_CODE); /* XXX demap? XXX */ - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s == outs) @@ -669,6 +669,11 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, local_irq_restore(flags); } +static int dma_4v_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4v_dma_ops = { .alloc = dma_4v_alloc_coherent, .free = dma_4v_free_coherent, @@ -676,6 +681,7 @@ static const struct dma_map_ops sun4v_dma_ops = { .unmap_page = dma_4v_unmap_page, .map_sg = dma_4v_map_sg, .unmap_sg = dma_4v_unmap_sg, + .mapping_error = dma_4v_mapping_error, }; static void pci_sun4v_scan_bus(struct pci_pbm_info *pbm, struct device *parent) -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: hch@lst.de (Christoph Hellwig) Date: Thu, 8 Jun 2017 15:25:45 +0200 Subject: [PATCH 20/44] sparc: implement ->mapping_error In-Reply-To: <20170608132609.32662-1-hch@lst.de> References: <20170608132609.32662-1-hch@lst.de> Message-ID: <20170608132609.32662-21-hch@lst.de> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org DMA_ERROR_CODE is going to go away, so don't rely on it. Signed-off-by: Christoph Hellwig --- arch/sparc/include/asm/dma-mapping.h | 2 -- arch/sparc/kernel/iommu.c | 12 +++++++++--- arch/sparc/kernel/iommu_common.h | 2 ++ arch/sparc/kernel/pci_sun4v.c | 14 ++++++++++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h index 69cc627779f2..b8e8dfcd065d 100644 --- a/arch/sparc/include/asm/dma-mapping.h +++ b/arch/sparc/include/asm/dma-mapping.h @@ -5,8 +5,6 @@ #include #include -#define DMA_ERROR_CODE (~(dma_addr_t)0x0) - #define HAVE_ARCH_DMA_SUPPORTED 1 int dma_supported(struct device *dev, u64 mask); diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index c63ba99ca551..dafa316d978d 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c @@ -314,7 +314,7 @@ static dma_addr_t dma_4u_map_page(struct device *dev, struct page *page, bad_no_ctx: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void strbuf_flush(struct strbuf *strbuf, struct iommu *iommu, @@ -547,7 +547,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -573,7 +573,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(&iommu->tbl, vaddr, npages, IOMMU_ERROR_CODE); - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s == outs) @@ -741,6 +741,11 @@ static void dma_4u_sync_sg_for_cpu(struct device *dev, spin_unlock_irqrestore(&iommu->lock, flags); } +static int dma_4u_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4u_dma_ops = { .alloc = dma_4u_alloc_coherent, .free = dma_4u_free_coherent, @@ -750,6 +755,7 @@ static const struct dma_map_ops sun4u_dma_ops = { .unmap_sg = dma_4u_unmap_sg, .sync_single_for_cpu = dma_4u_sync_single_for_cpu, .sync_sg_for_cpu = dma_4u_sync_sg_for_cpu, + .mapping_error = dma_4u_mapping_error, }; const struct dma_map_ops *dma_ops = &sun4u_dma_ops; diff --git a/arch/sparc/kernel/iommu_common.h b/arch/sparc/kernel/iommu_common.h index 828493329f68..5ea5c192b1d9 100644 --- a/arch/sparc/kernel/iommu_common.h +++ b/arch/sparc/kernel/iommu_common.h @@ -47,4 +47,6 @@ static inline int is_span_boundary(unsigned long entry, return iommu_is_span_boundary(entry, nr, shift, boundary_size); } +#define SPARC_MAPPING_ERROR (~(dma_addr_t)0x0) + #endif /* _IOMMU_COMMON_H */ diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index 68bec7c97cb8..8e2a56f4c03a 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c @@ -412,12 +412,12 @@ static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page, bad: if (printk_ratelimit()) WARN_ON(1); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; iommu_map_fail: local_irq_restore(flags); iommu_tbl_range_free(tbl, bus_addr, npages, IOMMU_ERROR_CODE); - return DMA_ERROR_CODE; + return SPARC_MAPPING_ERROR; } static void dma_4v_unmap_page(struct device *dev, dma_addr_t bus_addr, @@ -590,7 +590,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, if (outcount < incount) { outs = sg_next(outs); - outs->dma_address = DMA_ERROR_CODE; + outs->dma_address = SPARC_MAPPING_ERROR; outs->dma_length = 0; } @@ -607,7 +607,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, iommu_tbl_range_free(tbl, vaddr, npages, IOMMU_ERROR_CODE); /* XXX demap? XXX */ - s->dma_address = DMA_ERROR_CODE; + s->dma_address = SPARC_MAPPING_ERROR; s->dma_length = 0; } if (s == outs) @@ -669,6 +669,11 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, local_irq_restore(flags); } +static int dma_4v_mapping_error(struct device *dev, dma_addr_t dma_addr) +{ + return dma_addr == SPARC_MAPPING_ERROR; +} + static const struct dma_map_ops sun4v_dma_ops = { .alloc = dma_4v_alloc_coherent, .free = dma_4v_free_coherent, @@ -676,6 +681,7 @@ static const struct dma_map_ops sun4v_dma_ops = { .unmap_page = dma_4v_unmap_page, .map_sg = dma_4v_map_sg, .unmap_sg = dma_4v_unmap_sg, + .mapping_error = dma_4v_mapping_error, }; static void pci_sun4v_scan_bus(struct pci_pbm_info *pbm, struct device *parent) -- 2.11.0