[PATCH] drm/amdgpu: refuse to reserve io mem for split VRAM buffers
deathsimple at vodafone.de
Fri Feb 17 10:08:14 UTC 2017
Am 17.02.2017 um 00:21 schrieb Nicolai Hähnle:
> On 17.02.2017 00:02, Alex Deucher wrote:
>> On Thu, Feb 16, 2017 at 5:55 PM, Nicolai Hähnle <nhaehnle at gmail.com>
>>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>> When the fast blit path fails while attempting to move a buffer from
>>> to VRAM, we fall back to a CPU-based memcpy that cannot handle split
>>> buffers. Instead of crashing, simply fail the buffer move.
>>> Ideally, we would teach TTM about split buffers so that the fallback
>>> works in this case, but that is quite involved. So for now, apply the
>>> simplest possible fix.
>>> Fixes: 40361bb1704b ("drm/amdgpu: add VRAM manager v2")
>>> Signed-off-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>> Possibly fixes this bug report?
> It's related, but I think that report is a false positive. It does
> point at code that is not too pretty, though. I've commented on that
> bug report as well.
> In any case, that overflow should indeed happen whenever the bug
> addressed by this patch happens, but (a) this patch doesn't change
> that, and (b) I'm pretty sure that the overflow reported by PaX is
Yes, agree. The bug report is indeed a false positive.
Nicolai what do you think about removing the offset from the BO
structure and only calculate it on demand?
> We may still have other bugs with split BOs, though.
Yeah, agree as well. I was also considering disabling that feature by
default for the moment if it helps with your corruption bug.
>>> I ran into this bug during testing. Unfortunately it does not fix the
>>> memory corruption bug that I mentioned elsewhere... oh well.
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 +++
>>> 1 file changed, 3 insertions(+)
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> index 8d6a68f..f8b578d 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> @@ -529,6 +529,9 @@ static int amdgpu_ttm_io_mem_reserve(struct
>>> ttm_bo_device *bdev, struct ttm_mem_
>>> case TTM_PL_TT:
>>> case TTM_PL_VRAM:
>>> + if (mem->start == AMDGPU_BO_INVALID_OFFSET)
>>> + return -EINVAL;
>>> mem->bus.offset = mem->start << PAGE_SHIFT;
>>> /* check if it's visible */
>>> if ((mem->bus.offset + mem->bus.size) >
>>> amd-gfx mailing list
>>> amd-gfx at lists.freedesktop.org
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
More information about the amd-gfx