From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Date: Fri, 16 Jun 2017 18:10:50 +0000 Subject: [PATCH 35/44] x86: remove arch specific dma_supported implementation Message-Id: <20170616181059.19206-36-hch@lst.de> List-Id: References: <20170616181059.19206-1-hch@lst.de> In-Reply-To: <20170616181059.19206-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 And instead wire it up as method for all the dma_map_ops instances. Note that this also means the arch specific check will be fully instead of partially applied in the AMD iommu driver. Signed-off-by: Christoph Hellwig --- arch/x86/include/asm/dma-mapping.h | 3 --- arch/x86/include/asm/iommu.h | 2 ++ arch/x86/kernel/amd_gart_64.c | 1 + arch/x86/kernel/pci-calgary_64.c | 1 + arch/x86/kernel/pci-dma.c | 7 +------ arch/x86/kernel/pci-nommu.c | 1 + arch/x86/pci/sta2x11-fixup.c | 3 ++- drivers/iommu/amd_iommu.c | 2 ++ drivers/iommu/intel-iommu.c | 3 +++ 9 files changed, 13 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index c35d228aa381..398c79889f5c 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h @@ -33,9 +33,6 @@ static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus) bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); #define arch_dma_alloc_attrs arch_dma_alloc_attrs -#define HAVE_ARCH_DMA_SUPPORTED 1 -extern int dma_supported(struct device *hwdev, u64 mask); - extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, unsigned long attrs); diff --git a/arch/x86/include/asm/iommu.h b/arch/x86/include/asm/iommu.h index 793869879464..fca144a104e4 100644 --- a/arch/x86/include/asm/iommu.h +++ b/arch/x86/include/asm/iommu.h @@ -6,6 +6,8 @@ extern int force_iommu, no_iommu; extern int iommu_detected; extern int iommu_pass_through; +int x86_dma_supported(struct device *dev, u64 mask); + /* 10 seconds */ #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 815dd63f49d0..cc0e8bc0ea3f 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -704,6 +704,7 @@ static const struct dma_map_ops gart_dma_ops = { .alloc = gart_alloc_coherent, .free = gart_free_coherent, .mapping_error = gart_mapping_error, + .dma_supported = x86_dma_supported, }; static void gart_iommu_shutdown(void) diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index e75b490f2b0b..5286a4a92cf7 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -493,6 +493,7 @@ static const struct dma_map_ops calgary_dma_ops = { .map_page = calgary_map_page, .unmap_page = calgary_unmap_page, .mapping_error = calgary_mapping_error, + .dma_supported = x86_dma_supported, }; static inline void __iomem * busno_to_bbar(unsigned char num) diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 3a216ec869cd..b6f5684be3b5 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -213,10 +213,8 @@ static __init int iommu_setup(char *p) } early_param("iommu", iommu_setup); -int dma_supported(struct device *dev, u64 mask) +int x86_dma_supported(struct device *dev, u64 mask) { - const struct dma_map_ops *ops = get_dma_ops(dev); - #ifdef CONFIG_PCI if (mask > 0xffffffff && forbid_dac > 0) { dev_info(dev, "PCI: Disallowing DAC for device\n"); @@ -224,9 +222,6 @@ int dma_supported(struct device *dev, u64 mask) } #endif - if (ops->dma_supported) - return ops->dma_supported(dev, mask); - /* Copied from i386. Doesn't make much sense, because it will only work for pci_alloc_coherent. The caller just has to use GFP_DMA in this case. */ diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c index 085fe6ce4049..a6d404087fe3 100644 --- a/arch/x86/kernel/pci-nommu.c +++ b/arch/x86/kernel/pci-nommu.c @@ -104,4 +104,5 @@ const struct dma_map_ops nommu_dma_ops = { .sync_sg_for_device = nommu_sync_sg_for_device, .is_phys = 1, .mapping_error = nommu_mapping_error, + .dma_supported = x86_dma_supported, }; diff --git a/arch/x86/pci/sta2x11-fixup.c b/arch/x86/pci/sta2x11-fixup.c index ec008e800b45..53d600217973 100644 --- a/arch/x86/pci/sta2x11-fixup.c +++ b/arch/x86/pci/sta2x11-fixup.c @@ -26,6 +26,7 @@ #include #include #include +#include #define STA2X11_SWIOTLB_SIZE (4*1024*1024) extern int swiotlb_late_init_with_default_size(size_t default_size); @@ -191,7 +192,7 @@ static const struct dma_map_ops sta2x11_dma_ops = { .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, .sync_sg_for_device = swiotlb_sync_sg_for_device, .mapping_error = swiotlb_dma_mapping_error, - .dma_supported = NULL, /* FIXME: we should use this instead! */ + .dma_supported = x86_dma_supported, }; /* At setup time, we use our own ops if the device is a ConneXt one */ diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index d41280e869de..521fdf2d41bc 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -2731,6 +2731,8 @@ static void free_coherent(struct device *dev, size_t size, */ static int amd_iommu_dma_supported(struct device *dev, u64 mask) { + if (!x86_dma_supported(dev, mask)) + return 0; return check_device(dev); } diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index fc2765ccdb57..53cc0a393f04 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3981,6 +3981,9 @@ struct dma_map_ops intel_dma_ops = { .map_page = intel_map_page, .unmap_page = intel_unmap_page, .mapping_error = intel_mapping_error, +#ifdef CONFIG_X86 + .dma_supported = x86_dma_supported, +#endif }; static inline int iommu_domain_cache_init(void) -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 35/44] x86: remove arch specific dma_supported implementation Date: Fri, 16 Jun 2017 20:10:50 +0200 Message-ID: <20170616181059.19206-36-hch@lst.de> References: <20170616181059.19206-1-hch@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170616181059.19206-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 QW5kIGluc3RlYWQgd2lyZSBpdCB1cCBhcyBtZXRob2QgZm9yIGFsbCB0aGUgZG1hX21hcF9vcHMg aW5zdGFuY2VzLgoKTm90ZSB0aGF0IHRoaXMgYWxzbyBtZWFucyB0aGUgYXJjaCBzcGVjaWZpYyBj aGVjayB3aWxsIGJlIGZ1bGx5IGluc3RlYWQKb2YgcGFydGlhbGx5IGFwcGxpZWQgaW4gdGhlIEFN RCBpb21tdSBkcml2ZXIuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxz dC5kZT4KLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIHwgMyAtLS0KIGFy Y2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmggICAgICAgfCAyICsrCiBhcmNoL3g4Ni9rZXJuZWwv YW1kX2dhcnRfNjQuYyAgICAgIHwgMSArCiBhcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQu YyAgIHwgMSArCiBhcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jICAgICAgICAgIHwgNyArLS0tLS0t CiBhcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMgICAgICAgIHwgMSArCiBhcmNoL3g4Ni9wY2kv c3RhMngxMS1maXh1cC5jICAgICAgIHwgMyArKy0KIGRyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMg ICAgICAgICAgfCAyICsrCiBkcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMgICAgICAgIHwgMyAr KysKIDkgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYzM1ZDIyOGFhMzgxLi4zOThjNzk4ODlm NWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIv YXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMzMsOSArMzMsNiBAQCBzdGF0 aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqZ2V0X2FyY2hfZG1hX29wcyhzdHJ1 Y3QgYnVzX3R5cGUgKmJ1cykKIGJvb2wgYXJjaF9kbWFfYWxsb2NfYXR0cnMoc3RydWN0IGRldmlj ZSAqKmRldiwgZ2ZwX3QgKmdmcCk7CiAjZGVmaW5lIGFyY2hfZG1hX2FsbG9jX2F0dHJzIGFyY2hf ZG1hX2FsbG9jX2F0dHJzCiAKLSNkZWZpbmUgSEFWRV9BUkNIX0RNQV9TVVBQT1JURUQgMQotZXh0 ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci0K IGV4dGVybiB2b2lkICpkbWFfZ2VuZXJpY19hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHNpemVfdCBzaXplLAogCQkJCQlkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZmxhZywK IAkJCQkJdW5zaWduZWQgbG9uZyBhdHRycyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRl L2FzbS9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCA3OTM4Njk4 Nzk0NjQuLmZjYTE0NGExMDRlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9t bXUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCkBAIC02LDYgKzYsOCBAQCBl eHRlcm4gaW50IGZvcmNlX2lvbW11LCBub19pb21tdTsKIGV4dGVybiBpbnQgaW9tbXVfZGV0ZWN0 ZWQ7CiBleHRlcm4gaW50IGlvbW11X3Bhc3NfdGhyb3VnaDsKIAoraW50IHg4Nl9kbWFfc3VwcG9y dGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOworCiAvKiAxMCBzZWNvbmRzICovCiAj ZGVmaW5lIERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAw KQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYyBiL2FyY2gveDg2 L2tlcm5lbC9hbWRfZ2FydF82NC5jCmluZGV4IDgxNWRkNjNmNDlkMC4uY2MwZThiYzBlYTNmIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9r ZXJuZWwvYW1kX2dhcnRfNjQuYwpAQCAtNzA0LDYgKzcwNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZG1hX21hcF9vcHMgZ2FydF9kbWFfb3BzID0gewogCS5hbGxvYwkJCQk9IGdhcnRfYWxsb2Nf Y29oZXJlbnQsCiAJLmZyZWUJCQkJPSBnYXJ0X2ZyZWVfY29oZXJlbnQsCiAJLm1hcHBpbmdfZXJy b3IJCQk9IGdhcnRfbWFwcGluZ19lcnJvciwKKwkuZG1hX3N1cHBvcnRlZAkJCT0geDg2X2RtYV9z dXBwb3J0ZWQsCiB9OwogCiBzdGF0aWMgdm9pZCBnYXJ0X2lvbW11X3NodXRkb3duKHZvaWQpCmRp ZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYyBiL2FyY2gveDg2L2tl cm5lbC9wY2ktY2FsZ2FyeV82NC5jCmluZGV4IGU3NWI0OTBmMmIwYi4uNTI4NmE0YTkyY2Y3IDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYworKysgYi9hcmNoL3g4 Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYwpAQCAtNDkzLDYgKzQ5Myw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZG1hX21hcF9vcHMgY2FsZ2FyeV9kbWFfb3BzID0gewogCS5tYXBfcGFnZSA9IGNh bGdhcnlfbWFwX3BhZ2UsCiAJLnVubWFwX3BhZ2UgPSBjYWxnYXJ5X3VubWFwX3BhZ2UsCiAJLm1h cHBpbmdfZXJyb3IgPSBjYWxnYXJ5X21hcHBpbmdfZXJyb3IsCisJLmRtYV9zdXBwb3J0ZWQgPSB4 ODZfZG1hX3N1cHBvcnRlZCwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICogYnVz bm9fdG9fYmJhcih1bnNpZ25lZCBjaGFyIG51bSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5l bC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDNhMjE2ZWM4Njlj ZC4uYjZmNTY4NGJlM2I1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisr KyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTIxMywxMCArMjEzLDggQEAgc3RhdGlj IF9faW5pdCBpbnQgaW9tbXVfc2V0dXAoY2hhciAqcCkKIH0KIGVhcmx5X3BhcmFtKCJpb21tdSIs IGlvbW11X3NldHVwKTsKIAotaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1 NjQgbWFzaykKK2ludCB4ODZfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBt YXNrKQogewotCWNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2 KTsKLQogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAobWFzayA+IDB4ZmZmZmZmZmYgJiYgZm9yYmlk X2RhYyA+IDApIHsKIAkJZGV2X2luZm8oZGV2LCAiUENJOiBEaXNhbGxvd2luZyBEQUMgZm9yIGRl dmljZVxuIik7CkBAIC0yMjQsOSArMjIyLDYgQEAgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRl dmljZSAqZGV2LCB1NjQgbWFzaykKIAl9CiAjZW5kaWYKIAotCWlmIChvcHMtPmRtYV9zdXBwb3J0 ZWQpCi0JCXJldHVybiBvcHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKLQogCS8qIENvcGll ZCBmcm9tIGkzODYuIERvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLCBiZWNhdXNlIGl0IHdpbGwKIAkg ICBvbmx5IHdvcmsgZm9yIHBjaV9hbGxvY19jb2hlcmVudC4KIAkgICBUaGUgY2FsbGVyIGp1c3Qg aGFzIHRvIHVzZSBHRlBfRE1BIGluIHRoaXMgY2FzZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2tlcm5lbC9wY2ktbm9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwppbmRleCAw ODVmZTZjZTQwNDkuLmE2ZDQwNDA4N2ZlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Bj aS1ub21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwpAQCAtMTA0LDQgKzEw NCw1IEBAIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzID0gewogCS5zeW5j X3NnX2Zvcl9kZXZpY2UJPSBub21tdV9zeW5jX3NnX2Zvcl9kZXZpY2UsCiAJLmlzX3BoeXMJCT0g MSwKIAkubWFwcGluZ19lcnJvcgkJPSBub21tdV9tYXBwaW5nX2Vycm9yLAorCS5kbWFfc3VwcG9y dGVkCQk9IHg4Nl9kbWFfc3VwcG9ydGVkLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9z dGEyeDExLWZpeHVwLmMgYi9hcmNoL3g4Ni9wY2kvc3RhMngxMS1maXh1cC5jCmluZGV4IGVjMDA4 ZTgwMGI0NS4uNTNkNjAwMjE3OTczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvc3RhMngxMS1m aXh1cC5jCisrKyBiL2FyY2gveDg2L3BjaS9zdGEyeDExLWZpeHVwLmMKQEAgLTI2LDYgKzI2LDcg QEAKICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+ CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogCiAjZGVm aW5lIFNUQTJYMTFfU1dJT1RMQl9TSVpFICg0KjEwMjQqMTAyNCkKIGV4dGVybiBpbnQgc3dpb3Rs Yl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoc2l6ZV90IGRlZmF1bHRfc2l6ZSk7CkBAIC0x OTEsNyArMTkyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyBzdGEyeDExX2Rt YV9vcHMgPSB7CiAJLnN5bmNfc2dfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zZ19mb3JfY3B1LAog CS5zeW5jX3NnX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZSwKIAkubWFw cGluZ19lcnJvciA9IHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IsCi0JLmRtYV9zdXBwb3J0ZWQg PSBOVUxMLCAvKiBGSVhNRTogd2Ugc2hvdWxkIHVzZSB0aGlzIGluc3RlYWQhICovCisJLmRtYV9z dXBwb3J0ZWQgPSB4ODZfZG1hX3N1cHBvcnRlZCwKIH07CiAKIC8qIEF0IHNldHVwIHRpbWUsIHdl IHVzZSBvdXIgb3duIG9wcyBpZiB0aGUgZGV2aWNlIGlzIGEgQ29ubmVYdCBvbmUgKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21t dS5jCmluZGV4IGQ0MTI4MGU4NjlkZS4uNTIxZmRmMmQ0MWJjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2lvbW11L2FtZF9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKQEAgLTI3 MzEsNiArMjczMSw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAq ZGV2LCBzaXplX3Qgc2l6ZSwKICAqLwogc3RhdGljIGludCBhbWRfaW9tbXVfZG1hX3N1cHBvcnRl ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogeworCWlmICgheDg2X2RtYV9zdXBwb3J0 ZWQoZGV2LCBtYXNrKSkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIGNoZWNrX2RldmljZShkZXYpOwog fQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL2lv bW11L2ludGVsLWlvbW11LmMKaW5kZXggZmMyNzY1Y2NkYjU3Li41M2NjMGEzOTNmMDQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2lu dGVsLWlvbW11LmMKQEAgLTM5ODEsNiArMzk4MSw5IEBAIHN0cnVjdCBkbWFfbWFwX29wcyBpbnRl bF9kbWFfb3BzID0gewogCS5tYXBfcGFnZSA9IGludGVsX21hcF9wYWdlLAogCS51bm1hcF9wYWdl ID0gaW50ZWxfdW5tYXBfcGFnZSwKIAkubWFwcGluZ19lcnJvciA9IGludGVsX21hcHBpbmdfZXJy b3IsCisjaWZkZWYgQ09ORklHX1g4NgorCS5kbWFfc3VwcG9ydGVkID0geDg2X2RtYV9zdXBwb3J0 ZWQsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlvbW11X2RvbWFpbl9jYWNoZV9p bml0KHZvaWQpCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753404AbdFPSNe (ORCPT ); Fri, 16 Jun 2017 14:13:34 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:51739 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753369AbdFPSNY (ORCPT ); Fri, 16 Jun 2017 14:13:24 -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 35/44] x86: remove arch specific dma_supported implementation Date: Fri, 16 Jun 2017 20:10:50 +0200 Message-Id: <20170616181059.19206-36-hch@lst.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170616181059.19206-1-hch@lst.de> References: <20170616181059.19206-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 And instead wire it up as method for all the dma_map_ops instances. Note that this also means the arch specific check will be fully instead of partially applied in the AMD iommu driver. Signed-off-by: Christoph Hellwig --- arch/x86/include/asm/dma-mapping.h | 3 --- arch/x86/include/asm/iommu.h | 2 ++ arch/x86/kernel/amd_gart_64.c | 1 + arch/x86/kernel/pci-calgary_64.c | 1 + arch/x86/kernel/pci-dma.c | 7 +------ arch/x86/kernel/pci-nommu.c | 1 + arch/x86/pci/sta2x11-fixup.c | 3 ++- drivers/iommu/amd_iommu.c | 2 ++ drivers/iommu/intel-iommu.c | 3 +++ 9 files changed, 13 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index c35d228aa381..398c79889f5c 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h @@ -33,9 +33,6 @@ static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus) bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); #define arch_dma_alloc_attrs arch_dma_alloc_attrs -#define HAVE_ARCH_DMA_SUPPORTED 1 -extern int dma_supported(struct device *hwdev, u64 mask); - extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, unsigned long attrs); diff --git a/arch/x86/include/asm/iommu.h b/arch/x86/include/asm/iommu.h index 793869879464..fca144a104e4 100644 --- a/arch/x86/include/asm/iommu.h +++ b/arch/x86/include/asm/iommu.h @@ -6,6 +6,8 @@ extern int force_iommu, no_iommu; extern int iommu_detected; extern int iommu_pass_through; +int x86_dma_supported(struct device *dev, u64 mask); + /* 10 seconds */ #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 815dd63f49d0..cc0e8bc0ea3f 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -704,6 +704,7 @@ static const struct dma_map_ops gart_dma_ops = { .alloc = gart_alloc_coherent, .free = gart_free_coherent, .mapping_error = gart_mapping_error, + .dma_supported = x86_dma_supported, }; static void gart_iommu_shutdown(void) diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index e75b490f2b0b..5286a4a92cf7 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -493,6 +493,7 @@ static const struct dma_map_ops calgary_dma_ops = { .map_page = calgary_map_page, .unmap_page = calgary_unmap_page, .mapping_error = calgary_mapping_error, + .dma_supported = x86_dma_supported, }; static inline void __iomem * busno_to_bbar(unsigned char num) diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 3a216ec869cd..b6f5684be3b5 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -213,10 +213,8 @@ static __init int iommu_setup(char *p) } early_param("iommu", iommu_setup); -int dma_supported(struct device *dev, u64 mask) +int x86_dma_supported(struct device *dev, u64 mask) { - const struct dma_map_ops *ops = get_dma_ops(dev); - #ifdef CONFIG_PCI if (mask > 0xffffffff && forbid_dac > 0) { dev_info(dev, "PCI: Disallowing DAC for device\n"); @@ -224,9 +222,6 @@ int dma_supported(struct device *dev, u64 mask) } #endif - if (ops->dma_supported) - return ops->dma_supported(dev, mask); - /* Copied from i386. Doesn't make much sense, because it will only work for pci_alloc_coherent. The caller just has to use GFP_DMA in this case. */ diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c index 085fe6ce4049..a6d404087fe3 100644 --- a/arch/x86/kernel/pci-nommu.c +++ b/arch/x86/kernel/pci-nommu.c @@ -104,4 +104,5 @@ const struct dma_map_ops nommu_dma_ops = { .sync_sg_for_device = nommu_sync_sg_for_device, .is_phys = 1, .mapping_error = nommu_mapping_error, + .dma_supported = x86_dma_supported, }; diff --git a/arch/x86/pci/sta2x11-fixup.c b/arch/x86/pci/sta2x11-fixup.c index ec008e800b45..53d600217973 100644 --- a/arch/x86/pci/sta2x11-fixup.c +++ b/arch/x86/pci/sta2x11-fixup.c @@ -26,6 +26,7 @@ #include #include #include +#include #define STA2X11_SWIOTLB_SIZE (4*1024*1024) extern int swiotlb_late_init_with_default_size(size_t default_size); @@ -191,7 +192,7 @@ static const struct dma_map_ops sta2x11_dma_ops = { .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, .sync_sg_for_device = swiotlb_sync_sg_for_device, .mapping_error = swiotlb_dma_mapping_error, - .dma_supported = NULL, /* FIXME: we should use this instead! */ + .dma_supported = x86_dma_supported, }; /* At setup time, we use our own ops if the device is a ConneXt one */ diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index d41280e869de..521fdf2d41bc 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -2731,6 +2731,8 @@ static void free_coherent(struct device *dev, size_t size, */ static int amd_iommu_dma_supported(struct device *dev, u64 mask) { + if (!x86_dma_supported(dev, mask)) + return 0; return check_device(dev); } diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index fc2765ccdb57..53cc0a393f04 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3981,6 +3981,9 @@ struct dma_map_ops intel_dma_ops = { .map_page = intel_map_page, .unmap_page = intel_unmap_page, .mapping_error = intel_mapping_error, +#ifdef CONFIG_X86 + .dma_supported = x86_dma_supported, +#endif }; static inline int iommu_domain_cache_init(void) -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: hch@lst.de (Christoph Hellwig) Date: Fri, 16 Jun 2017 20:10:50 +0200 Subject: [PATCH 35/44] x86: remove arch specific dma_supported implementation In-Reply-To: <20170616181059.19206-1-hch@lst.de> References: <20170616181059.19206-1-hch@lst.de> Message-ID: <20170616181059.19206-36-hch@lst.de> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org And instead wire it up as method for all the dma_map_ops instances. Note that this also means the arch specific check will be fully instead of partially applied in the AMD iommu driver. Signed-off-by: Christoph Hellwig --- arch/x86/include/asm/dma-mapping.h | 3 --- arch/x86/include/asm/iommu.h | 2 ++ arch/x86/kernel/amd_gart_64.c | 1 + arch/x86/kernel/pci-calgary_64.c | 1 + arch/x86/kernel/pci-dma.c | 7 +------ arch/x86/kernel/pci-nommu.c | 1 + arch/x86/pci/sta2x11-fixup.c | 3 ++- drivers/iommu/amd_iommu.c | 2 ++ drivers/iommu/intel-iommu.c | 3 +++ 9 files changed, 13 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index c35d228aa381..398c79889f5c 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h @@ -33,9 +33,6 @@ static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus) bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp); #define arch_dma_alloc_attrs arch_dma_alloc_attrs -#define HAVE_ARCH_DMA_SUPPORTED 1 -extern int dma_supported(struct device *hwdev, u64 mask); - extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, gfp_t flag, unsigned long attrs); diff --git a/arch/x86/include/asm/iommu.h b/arch/x86/include/asm/iommu.h index 793869879464..fca144a104e4 100644 --- a/arch/x86/include/asm/iommu.h +++ b/arch/x86/include/asm/iommu.h @@ -6,6 +6,8 @@ extern int force_iommu, no_iommu; extern int iommu_detected; extern int iommu_pass_through; +int x86_dma_supported(struct device *dev, u64 mask); + /* 10 seconds */ #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index 815dd63f49d0..cc0e8bc0ea3f 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -704,6 +704,7 @@ static const struct dma_map_ops gart_dma_ops = { .alloc = gart_alloc_coherent, .free = gart_free_coherent, .mapping_error = gart_mapping_error, + .dma_supported = x86_dma_supported, }; static void gart_iommu_shutdown(void) diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index e75b490f2b0b..5286a4a92cf7 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c @@ -493,6 +493,7 @@ static const struct dma_map_ops calgary_dma_ops = { .map_page = calgary_map_page, .unmap_page = calgary_unmap_page, .mapping_error = calgary_mapping_error, + .dma_supported = x86_dma_supported, }; static inline void __iomem * busno_to_bbar(unsigned char num) diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 3a216ec869cd..b6f5684be3b5 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -213,10 +213,8 @@ static __init int iommu_setup(char *p) } early_param("iommu", iommu_setup); -int dma_supported(struct device *dev, u64 mask) +int x86_dma_supported(struct device *dev, u64 mask) { - const struct dma_map_ops *ops = get_dma_ops(dev); - #ifdef CONFIG_PCI if (mask > 0xffffffff && forbid_dac > 0) { dev_info(dev, "PCI: Disallowing DAC for device\n"); @@ -224,9 +222,6 @@ int dma_supported(struct device *dev, u64 mask) } #endif - if (ops->dma_supported) - return ops->dma_supported(dev, mask); - /* Copied from i386. Doesn't make much sense, because it will only work for pci_alloc_coherent. The caller just has to use GFP_DMA in this case. */ diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c index 085fe6ce4049..a6d404087fe3 100644 --- a/arch/x86/kernel/pci-nommu.c +++ b/arch/x86/kernel/pci-nommu.c @@ -104,4 +104,5 @@ const struct dma_map_ops nommu_dma_ops = { .sync_sg_for_device = nommu_sync_sg_for_device, .is_phys = 1, .mapping_error = nommu_mapping_error, + .dma_supported = x86_dma_supported, }; diff --git a/arch/x86/pci/sta2x11-fixup.c b/arch/x86/pci/sta2x11-fixup.c index ec008e800b45..53d600217973 100644 --- a/arch/x86/pci/sta2x11-fixup.c +++ b/arch/x86/pci/sta2x11-fixup.c @@ -26,6 +26,7 @@ #include #include #include +#include #define STA2X11_SWIOTLB_SIZE (4*1024*1024) extern int swiotlb_late_init_with_default_size(size_t default_size); @@ -191,7 +192,7 @@ static const struct dma_map_ops sta2x11_dma_ops = { .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, .sync_sg_for_device = swiotlb_sync_sg_for_device, .mapping_error = swiotlb_dma_mapping_error, - .dma_supported = NULL, /* FIXME: we should use this instead! */ + .dma_supported = x86_dma_supported, }; /* At setup time, we use our own ops if the device is a ConneXt one */ diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index d41280e869de..521fdf2d41bc 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -2731,6 +2731,8 @@ static void free_coherent(struct device *dev, size_t size, */ static int amd_iommu_dma_supported(struct device *dev, u64 mask) { + if (!x86_dma_supported(dev, mask)) + return 0; return check_device(dev); } diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index fc2765ccdb57..53cc0a393f04 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -3981,6 +3981,9 @@ struct dma_map_ops intel_dma_ops = { .map_page = intel_map_page, .unmap_page = intel_unmap_page, .mapping_error = intel_mapping_error, +#ifdef CONFIG_X86 + .dma_supported = x86_dma_supported, +#endif }; static inline int iommu_domain_cache_init(void) -- 2.11.0