From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH 1/2] x86/io: add interface to reserve io memtype for a resource range. Date: Mon, 24 Oct 2016 16:03:23 +1000 Message-ID: <1477289004-2183-2-git-send-email-airlied@redhat.com> References: <1477289004-2183-1-git-send-email-airlied@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 05B006E328 for ; Mon, 24 Oct 2016 06:03:45 +0000 (UTC) In-Reply-To: <1477289004-2183-1-git-send-email-airlied@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: mcgrof@suse.com, torvalds@linux-foundation.org, dan.j.williams@intel.com, x86@kernel.org Cc: Dave Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QSByZWNlbnQgY2hhbmdlIHRvIHRoZSBtbSBjb2RlIGluOgo4Nzc0NGFiMzgzMmI4M2JhNzFiOTMx Zjg2ZjljZmRiMDAwZDA3ZGE1Cm1tOiBmaXggY2FjaGUgbW9kZSB0cmFja2luZyBpbiB2bV9pbnNl cnRfbWl4ZWQoKQoKc3RhcnRlZCBlbmZvcmNpbmcgY2hlY2tpbmcgdGhlIG1lbW9yeSB0eXBlIGFn YWluc3QgdGhlIHJlZ2lzdGVyZWQgbGlzdCBmb3IKYW1peGVkIHBmbiBpbnNlcnRpb24gbWFwcGlu Z3MuIEl0IGhhcHBlbnMgdGhhdCB0aGUgZHJtIGRyaXZlcnMgZm9yIGEgbnVtYmVyCm9mIGdwdXMg cmVsaWVkIG9uIHRoaXMgYmVpbmcgYnJva2VuLiBDdXJyZW50bHkgdGhlIGRyaXZlciBvbmx5IGlu c2VydGVkClZSQU0gbWFwcGluZ3MgaW50byB0aGUgdHJhY2tpbmcgdGFibGUgd2hlbiB0aGV5IGNh bWUgZnJvbSB0aGUga2VybmVsLAphbmQgdXNlcnNwYWNlIG1hcHBpbmdzIG5ldmVyIGxhbmRlZCBp biB0aGUgdGFibGUuIFRoaXMgbGVkIHRvIGEgcmVncmVzc2lvbgp3aGVyZSBhbGwgdGhlIG1hcHBp bmcgZW5kIHVwIGFzIFVDIGluc3RlYWQgb2YgV0Mgbm93LgoKSSd2ZSBjb25zaWRlcmVkIGEgbnVt YmVyIG9mIHNvbHV0aW9ucyBidXQgc2luY2UgdGhpcyBuZWVkcyB0byBiZSBmaXhlZAppbiBmaXhl cyBhbmQgbm90IG5leHQsIGFuZCBzb21lIG9mIHRoZSBzb2x1dGlvbnMgd2VyZSBnb2luZyB0byBp bnRyb2R1Y2UKb3ZlcmhlYWQgdGhhdCBoYWRuJ3QgYmVlbiB0aGVyZSBiZWZvcmUgSSBkaWRuJ3Qg Y29uc2lkZXIgdGhlbSB2aWFibGUgYXQKdGhpcyBzdGFnZS4gVGhlc2UgbWFpbmx5IGNvbmNlcm5l ZCBob29raW5nIGludG8gdGhlIFRUTSBpbyByZXNlcnZlIEFQSXMsCmJ1dCB0aGVzZSBBUEkgaGF2 ZSBhIGJ1bmNoIG9mIGZhc3QgcGF0aHMgSSBkaWRuJ3Qgd2FudCB0byB1bndpbmQgdG8gYWRkCnRo aXMgdG8uCgpUaGUgc29sdXRpb24gSSd2ZSBkZWNpZGVkIG9uIGlzIHRvIGFkZCBhIG5ldyBBUEkg bGlrZSB0aGUgYXJjaF9waHlzX3djCkFQSXMgKHRoZXNlIHdvdWxkIGhhdmUgd29ya2VkIGJ1dCB3 Y19kZWwgZGlkbid0IHRha2UgYSByYW5nZSksIGFuZAp1c2UgdGhlbSBmcm9tIHRoZSBkcml2ZXJz IHRvIGFkZCBhIFdDIGNvbXBhdGlibGUgbWFwcGluZyB0byB0aGUgdGFibGUKZm9yIGFsbCBWUkFN IG9uIHRob3NlIEdQVXMuIFRoaXMgbWVhbnMgd2UgY2FuIHRoZW4gY3JlYXRlIHVzZXJzcGFjZQpt YXBwaW5nIHRoYXQgd29uJ3QgZ2V0IGRlZ3JhZGVkIHRvIFVDLgoKU2lnbmVkLW9mZi1ieTogRGF2 ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9p by5oIHwgIDYgKysrKysrCiBhcmNoL3g4Ni9tbS9wYXQuYyAgICAgICAgIHwgMTMgKysrKysrKysr KysrKwogaW5jbHVkZS9saW51eC9pby5oICAgICAgICB8IDEzICsrKysrKysrKysrKysKIDMgZmls ZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1 ZGUvYXNtL2lvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGRlMjVhYWQuLjZl MThmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC94 ODYvaW5jbHVkZS9hc20vaW8uaApAQCAtMzUxLDQgKzM1MSwxMCBAQCBleHRlcm4gdm9pZCBhcmNo X3BoeXNfd2NfZGVsKGludCBoYW5kbGUpOwogI2RlZmluZSBhcmNoX3BoeXNfd2NfYWRkIGFyY2hf cGh5c193Y19hZGQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BBVAorZXh0ZXJuIGludCBhcmNo X2lvX3Jlc2VydmVfbWVtdHlwZV93YyhyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3Np emVfdCBzaXplKTsKK2V4dGVybiB2b2lkIGFyY2hfaW9fZnJlZV9tZW10eXBlX3djKHJlc291cmNl X3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpOworI2RlZmluZSBhcmNoX2lvX3Jl c2VydmVfbWVtdHlwZV93YyBhcmNoX2lvX3Jlc2VydmVfbWVtdHlwZV93YworI2VuZGlmCisKICNl bmRpZiAvKiBfQVNNX1g4Nl9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBi L2FyY2gveDg2L21tL3BhdC5jCmluZGV4IDE3MGNjNGYuLjQ5ZDFiNzUgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC03MzAsNiArNzMwLDE5 IEBAIHZvaWQgaW9fZnJlZV9tZW10eXBlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vf c2l6ZV90IGVuZCkKIAlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CiB9CiAKK2ludCBhcmNoX2lv X3Jlc2VydmVfbWVtdHlwZV93YyhyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVf dCBzaXplKQoreworCWVudW0gcGFnZV9jYWNoZV9tb2RlIHR5cGUgPSBfUEFHRV9DQUNIRV9NT0RF X1dDOworCXJldHVybiBpb19yZXNlcnZlX21lbXR5cGUoc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgJnR5 cGUpOworfQorRVhQT1JUX1NZTUJPTChhcmNoX2lvX3Jlc2VydmVfbWVtdHlwZV93Yyk7CisKK3Zv aWQgYXJjaF9pb19mcmVlX21lbXR5cGVfd2MocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJj ZV9zaXplX3Qgc2l6ZSkKK3sKKwlpb19mcmVlX21lbXR5cGUoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7 Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfaW9fZnJlZV9tZW10eXBlX3djKTsKKwogcGdwcm90X3Qg cGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZu LAogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3Qgdm1hX3Byb3QpCiB7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L2lvLmggYi9pbmNsdWRlL2xpbnV4L2lvLmgKaW5kZXggZTJjODQx OS4uOTYzYWI3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pby5oCisrKyBiL2luY2x1ZGUv bGludXgvaW8uaApAQCAtMTQxLDQgKzE0MSwxNyBAQCBlbnVtIHsKIHZvaWQgKm1lbXJlbWFwKHJl c291cmNlX3NpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsK IHZvaWQgbWVtdW5tYXAodm9pZCAqYWRkcik7CiAKKyNpZm5kZWYgYXJjaF9pb19yZXNlcnZlX21l bXR5cGVfd2MKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaW9fcmVzZXJ2ZV9tZW10eXBlX3djKHJl c291cmNlX3NpemVfdCBiYXNlLAorCQkJCQkgICAgIHJlc291cmNlX3NpemVfdCBzaXplKQorewor CXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pb19mcmVlX21lbXR5cGVf d2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsCisJCQkJCSAgIHJlc291cmNlX3NpemVfdCBzaXplKQor eworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfTElOVVhfSU9fSCAqLwotLSAKMi41LjUKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933862AbcJXGDo (ORCPT ); Mon, 24 Oct 2016 02:03:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36902 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933204AbcJXGDj (ORCPT ); Mon, 24 Oct 2016 02:03:39 -0400 From: Dave Airlie To: mcgrof@suse.com, torvalds@linux-foundation.org, dan.j.williams@intel.com, x86@kernel.org Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Dave Airlie Subject: [PATCH 1/2] x86/io: add interface to reserve io memtype for a resource range. Date: Mon, 24 Oct 2016 16:03:23 +1000 Message-Id: <1477289004-2183-2-git-send-email-airlied@redhat.com> In-Reply-To: <1477289004-2183-1-git-send-email-airlied@redhat.com> References: <1477289004-2183-1-git-send-email-airlied@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 24 Oct 2016 06:03:39 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A recent change to the mm code in: 87744ab3832b83ba71b931f86f9cfdb000d07da5 mm: fix cache mode tracking in vm_insert_mixed() started enforcing checking the memory type against the registered list for amixed pfn insertion mappings. It happens that the drm drivers for a number of gpus relied on this being broken. Currently the driver only inserted VRAM mappings into the tracking table when they came from the kernel, and userspace mappings never landed in the table. This led to a regression where all the mapping end up as UC instead of WC now. I've considered a number of solutions but since this needs to be fixed in fixes and not next, and some of the solutions were going to introduce overhead that hadn't been there before I didn't consider them viable at this stage. These mainly concerned hooking into the TTM io reserve APIs, but these API have a bunch of fast paths I didn't want to unwind to add this to. The solution I've decided on is to add a new API like the arch_phys_wc APIs (these would have worked but wc_del didn't take a range), and use them from the drivers to add a WC compatible mapping to the table for all VRAM on those GPUs. This means we can then create userspace mapping that won't get degraded to UC. Signed-off-by: Dave Airlie --- arch/x86/include/asm/io.h | 6 ++++++ arch/x86/mm/pat.c | 13 +++++++++++++ include/linux/io.h | 13 +++++++++++++ 3 files changed, 32 insertions(+) diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index de25aad..6e18f66 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -351,4 +351,10 @@ extern void arch_phys_wc_del(int handle); #define arch_phys_wc_add arch_phys_wc_add #endif +#ifdef CONFIG_PAT +extern int arch_io_reserve_memtype_wc(resource_size_t start, resource_size_t size); +extern void arch_io_free_memtype_wc(resource_size_t start, resource_size_t size); +#define arch_io_reserve_memtype_wc arch_io_reserve_memtype_wc +#endif + #endif /* _ASM_X86_IO_H */ diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 170cc4f..49d1b75 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -730,6 +730,19 @@ void io_free_memtype(resource_size_t start, resource_size_t end) free_memtype(start, end); } +int arch_io_reserve_memtype_wc(resource_size_t start, resource_size_t size) +{ + enum page_cache_mode type = _PAGE_CACHE_MODE_WC; + return io_reserve_memtype(start, start + size, &type); +} +EXPORT_SYMBOL(arch_io_reserve_memtype_wc); + +void arch_io_free_memtype_wc(resource_size_t start, resource_size_t size) +{ + io_free_memtype(start, start + size); +} +EXPORT_SYMBOL(arch_io_free_memtype_wc); + pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, unsigned long size, pgprot_t vma_prot) { diff --git a/include/linux/io.h b/include/linux/io.h index e2c8419..963ab71 100644 --- a/include/linux/io.h +++ b/include/linux/io.h @@ -141,4 +141,17 @@ enum { void *memremap(resource_size_t offset, size_t size, unsigned long flags); void memunmap(void *addr); +#ifndef arch_io_reserve_memtype_wc +static inline int arch_io_reserve_memtype_wc(resource_size_t base, + resource_size_t size) +{ + return 0; +} + +static inline void arch_io_free_memtype_wc(resource_size_t base, + resource_size_t size) +{ +} +#endif + #endif /* _LINUX_IO_H */ -- 2.5.5