All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <deathsimple@vodafone.de>
To: Dave Airlie <airlied@redhat.com>,
	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
Subject: Re: [PATCH 2/2] drm/drivers: add support for using the arch wc mapping API.
Date: Mon, 24 Oct 2016 11:24:30 +0200	[thread overview]
Message-ID: <43fc3720-6775-7030-4ecc-edb00ac3ae1a@vodafone.de> (raw)
In-Reply-To: <1477290706-7696-3-git-send-email-airlied@redhat.com>

Am 24.10.2016 um 08:31 schrieb Dave Airlie:
> This fixes a regression in all these drivers since the cache
> mode tracking was fixed for mixed mappings. It uses the new
> arch API to add the VRAM range to the PAT mapping tracking
> tables.
>
> Fixes: 87744ab3832 (mm: fix cache mode tracking in vm_insert_mixed())
> Signed-off-by: Dave Airlie <airlied@redhat.com>

Reviewed-by: Christian König <christian.koenig@amd.com>.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 5 +++++
>   drivers/gpu/drm/ast/ast_ttm.c              | 6 ++++++
>   drivers/gpu/drm/cirrus/cirrus_ttm.c        | 7 +++++++
>   drivers/gpu/drm/mgag200/mgag200_ttm.c      | 7 +++++++
>   drivers/gpu/drm/nouveau/nouveau_ttm.c      | 8 ++++++++
>   drivers/gpu/drm/radeon/radeon_object.c     | 5 +++++
>   6 files changed, 38 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index aa074fa..f3efb1c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -754,6 +754,10 @@ static const char *amdgpu_vram_names[] = {
>   
>   int amdgpu_bo_init(struct amdgpu_device *adev)
>   {
> +	/* reserve PAT memory space to WC for VRAM */
> +	arch_io_reserve_memtype_wc(adev->mc.aper_base,
> +				   adev->mc.aper_size);
> +
>   	/* Add an MTRR for the VRAM */
>   	adev->mc.vram_mtrr = arch_phys_wc_add(adev->mc.aper_base,
>   					      adev->mc.aper_size);
> @@ -769,6 +773,7 @@ void amdgpu_bo_fini(struct amdgpu_device *adev)
>   {
>   	amdgpu_ttm_fini(adev);
>   	arch_phys_wc_del(adev->mc.vram_mtrr);
> +	arch_io_free_memtype_wc(adev->mc.aper_base, adev->mc.aper_size);
>   }
>   
>   int amdgpu_bo_fbdev_mmap(struct amdgpu_bo *bo,
> diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c
> index 608df4c..0743e65 100644
> --- a/drivers/gpu/drm/ast/ast_ttm.c
> +++ b/drivers/gpu/drm/ast/ast_ttm.c
> @@ -267,6 +267,8 @@ int ast_mm_init(struct ast_private *ast)
>   		return ret;
>   	}
>   
> +	arch_io_reserve_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				   pci_resource_len(dev->pdev, 0));
>   	ast->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
>   					pci_resource_len(dev->pdev, 0));
>   
> @@ -275,11 +277,15 @@ int ast_mm_init(struct ast_private *ast)
>   
>   void ast_mm_fini(struct ast_private *ast)
>   {
> +	struct drm_device *dev = ast->dev;
> +
>   	ttm_bo_device_release(&ast->ttm.bdev);
>   
>   	ast_ttm_global_release(ast);
>   
>   	arch_phys_wc_del(ast->fb_mtrr);
> +	arch_io_free_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				pci_resource_len(dev->pdev, 0));
>   }
>   
>   void ast_ttm_placement(struct ast_bo *bo, int domain)
> diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c
> index bb2438d..5e7e63c 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
> @@ -267,6 +267,9 @@ int cirrus_mm_init(struct cirrus_device *cirrus)
>   		return ret;
>   	}
>   
> +	arch_io_reserve_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				   pci_resource_len(dev->pdev, 0));
> +
>   	cirrus->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
>   					   pci_resource_len(dev->pdev, 0));
>   
> @@ -276,6 +279,8 @@ int cirrus_mm_init(struct cirrus_device *cirrus)
>   
>   void cirrus_mm_fini(struct cirrus_device *cirrus)
>   {
> +	struct drm_device *dev = cirrus->dev;
> +
>   	if (!cirrus->mm_inited)
>   		return;
>   
> @@ -285,6 +290,8 @@ void cirrus_mm_fini(struct cirrus_device *cirrus)
>   
>   	arch_phys_wc_del(cirrus->fb_mtrr);
>   	cirrus->fb_mtrr = 0;
> +	arch_io_free_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				pci_resource_len(dev->pdev, 0));
>   }
>   
>   void cirrus_ttm_placement(struct cirrus_bo *bo, int domain)
> diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c
> index 919b35f..dcf7d11 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_ttm.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c
> @@ -266,6 +266,9 @@ int mgag200_mm_init(struct mga_device *mdev)
>   		return ret;
>   	}
>   
> +	arch_io_reserve_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				   pci_resource_len(dev->pdev, 0));
> +
>   	mdev->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
>   					 pci_resource_len(dev->pdev, 0));
>   
> @@ -274,10 +277,14 @@ int mgag200_mm_init(struct mga_device *mdev)
>   
>   void mgag200_mm_fini(struct mga_device *mdev)
>   {
> +	struct drm_device *dev = mdev->dev;
> +
>   	ttm_bo_device_release(&mdev->ttm.bdev);
>   
>   	mgag200_ttm_global_release(mdev);
>   
> +	arch_io_free_memtype_wc(pci_resource_start(dev->pdev, 0),
> +				pci_resource_len(dev->pdev, 0));
>   	arch_phys_wc_del(mdev->fb_mtrr);
>   	mdev->fb_mtrr = 0;
>   }
> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> index 1825dbc..a6dbe82 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> @@ -398,6 +398,9 @@ nouveau_ttm_init(struct nouveau_drm *drm)
>   	/* VRAM init */
>   	drm->gem.vram_available = drm->device.info.ram_user;
>   
> +	arch_io_reserve_memtype_wc(device->func->resource_addr(device, 1),
> +				   device->func->resource_size(device, 1));
> +
>   	ret = ttm_bo_init_mm(&drm->ttm.bdev, TTM_PL_VRAM,
>   			      drm->gem.vram_available >> PAGE_SHIFT);
>   	if (ret) {
> @@ -430,6 +433,8 @@ nouveau_ttm_init(struct nouveau_drm *drm)
>   void
>   nouveau_ttm_fini(struct nouveau_drm *drm)
>   {
> +	struct nvkm_device *device = nvxx_device(&drm->device);
> +
>   	ttm_bo_clean_mm(&drm->ttm.bdev, TTM_PL_VRAM);
>   	ttm_bo_clean_mm(&drm->ttm.bdev, TTM_PL_TT);
>   
> @@ -439,4 +444,7 @@ nouveau_ttm_fini(struct nouveau_drm *drm)
>   
>   	arch_phys_wc_del(drm->ttm.mtrr);
>   	drm->ttm.mtrr = 0;
> +	arch_io_free_memtype_wc(device->func->resource_addr(device, 1),
> +				device->func->resource_size(device, 1));
> +
>   }
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
> index be30861..41b72ce 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -446,6 +446,10 @@ void radeon_bo_force_delete(struct radeon_device *rdev)
>   
>   int radeon_bo_init(struct radeon_device *rdev)
>   {
> +	/* reserve PAT memory space to WC for VRAM */
> +	arch_io_reserve_memtype_wc(rdev->mc.aper_base,
> +				   rdev->mc.aper_size);
> +
>   	/* Add an MTRR for the VRAM */
>   	if (!rdev->fastfb_working) {
>   		rdev->mc.vram_mtrr = arch_phys_wc_add(rdev->mc.aper_base,
> @@ -463,6 +467,7 @@ void radeon_bo_fini(struct radeon_device *rdev)
>   {
>   	radeon_ttm_fini(rdev);
>   	arch_phys_wc_del(rdev->mc.vram_mtrr);
> +	arch_io_free_memtype_wc(rdev->mc.aper_base, rdev->mc.aper_size);
>   }
>   
>   /* Returns how many bytes TTM can move per IB.

  reply	other threads:[~2016-10-24  9:25 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-24  6:31 x86 PAT memtype regression fixes (with extra cc's) Dave Airlie
2016-10-24  6:31 ` [PATCH 1/2] x86/io: add interface to reserve io memtype for a resource range. (v1.1) Dave Airlie
2016-10-25  9:40   ` Ingo Molnar
2016-10-25 11:10   ` Thomas Gleixner
2016-10-25 17:31   ` Luis R. Rodriguez
2016-10-26  5:49     ` Daniel Vetter
2016-10-26  6:12       ` Dave Airlie
2016-10-26  7:00         ` Daniel Vetter
2016-10-26  7:00           ` Daniel Vetter
2016-10-26 17:48   ` [PATCH] x86/pat, mm: Make track_pfn_insert() return void Borislav Petkov
2016-10-26 17:48     ` Borislav Petkov
2016-11-09 20:42     ` [tip:mm/pat] " tip-bot for Borislav Petkov
2016-10-24  6:31 ` [PATCH 2/2] drm/drivers: add support for using the arch wc mapping API Dave Airlie
2016-10-24  6:31   ` Dave Airlie
2016-10-24  9:24   ` Christian König [this message]
  -- strict thread matches above, loose matches on Subject: below --
2016-10-24  6:03 x86 PAT memtype regression fix (resend) Dave Airlie
2016-10-24  6:03 ` [PATCH 2/2] drm/drivers: add support for using the arch wc mapping API Dave Airlie
2016-10-24  6:03   ` Dave Airlie
2016-10-24  5:51 [PATCH 1/2] x86/io: add interface to reserve io memtype for a resource range Dave Airlie
2016-10-24  5:51 ` [PATCH 2/2] drm/drivers: add support for using the arch wc mapping API Dave Airlie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43fc3720-6775-7030-4ecc-edb00ac3ae1a@vodafone.de \
    --to=deathsimple@vodafone.de \
    --cc=airlied@redhat.com \
    --cc=dan.j.williams@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@suse.com \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.