From owner-dev-commits-src-all@freebsd.org Thu Aug 12 07:24:19 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8EF36665911; Thu, 12 Aug 2021 07:24:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4GldVC2z7Jz3sWn; Thu, 12 Aug 2021 07:24:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ED351EBBB; Thu, 12 Aug 2021 07:24:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 17C7OJp1043709; Thu, 12 Aug 2021 07:24:19 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 17C7OJ8h043708; Thu, 12 Aug 2021 07:24:19 GMT (envelope-from git) Date: Thu, 12 Aug 2021 07:24:19 GMT Message-Id: <202108120724.17C7OJ8h043708@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: =?utf-8?Q?Roger Pau Monn=C3=A9?= Subject: git: f4c6843ec2b9 - main - xen: use correct cache attributes for Xen specific memory regions MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: royger X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f4c6843ec2b9aa5eff475778fb000ed6278c5b77 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Aug 2021 07:24:19 -0000 The branch main has been updated by royger: URL: https://cgit.FreeBSD.org/src/commit/?id=f4c6843ec2b9aa5eff475778fb000ed6278c5b77 commit f4c6843ec2b9aa5eff475778fb000ed6278c5b77 Author: Roger Pau Monné AuthorDate: 2021-04-09 09:31:44 +0000 Commit: Roger Pau Monné CommitDate: 2021-08-12 07:18:32 +0000 xen: use correct cache attributes for Xen specific memory regions bus_activate_resource maps memory regions as uncacheable on x86, which is more strict than required for regions allocated using xenmem_alloc, so don't rely on bus_activate_resource and instead map the region using pmap_mapdev_attr and VM_MEMATTR_XEN as the cache attribute. Sponsored by: Citrix Systems R&D --- sys/dev/xen/bus/xenpv.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/dev/xen/bus/xenpv.c b/sys/dev/xen/bus/xenpv.c index 42f2c88a2885..91004039a85e 100644 --- a/sys/dev/xen/bus/xenpv.c +++ b/sys/dev/xen/bus/xenpv.c @@ -120,10 +120,11 @@ xenpv_alloc_physmem(device_t dev, device_t child, int *res_id, size_t size) { struct resource *res; vm_paddr_t phys_addr; + void *virt_addr; int error; res = bus_alloc_resource(child, SYS_RES_MEMORY, res_id, LOW_MEM_LIMIT, - ~0, size, RF_ACTIVE); + ~0, size, RF_ACTIVE | RF_UNMAPPED); if (res == NULL) return (NULL); @@ -134,6 +135,9 @@ xenpv_alloc_physmem(device_t dev, device_t child, int *res_id, size_t size) bus_release_resource(child, SYS_RES_MEMORY, *res_id, res); return (NULL); } + virt_addr = pmap_mapdev_attr(phys_addr, size, VM_MEMATTR_XEN); + KASSERT(virt_addr != NULL, ("Failed to create linear mappings")); + rman_set_virtual(res, virt_addr); return (res); } @@ -142,11 +146,14 @@ static int xenpv_free_physmem(device_t dev, device_t child, int res_id, struct resource *res) { vm_paddr_t phys_addr; + vm_offset_t virt_addr; size_t size; phys_addr = rman_get_start(res); size = rman_get_size(res); + virt_addr = (vm_offset_t)rman_get_virtual(res); + pmap_unmapdev(virt_addr, size); vm_phys_fictitious_unreg_range(phys_addr, phys_addr + size); return (bus_release_resource(child, SYS_RES_MEMORY, res_id, res)); }