• Paulo Zanoni's avatar
    drm/i915: fix stolen bios_reserved checks · 3774eb50
    Paulo Zanoni authored
    I started digging this when I noticed that the BDW code was just
    reserving 1mb by coincidence since it was reading reserved fields.
    Then I noticed we didn't have any values set for SNB and earlier, and
    that the HSW sizes were wrong. After that, I noticed that the reserved
    area has a specific start, and may not exactly end where the stolen
    memory ends. I also noticed the base pointer can be zero. So I decided
    to just write a single patch fixing everything instead of 20 patches
    that would be much harder to review.
    
    This patch may solve random stolen memory corruption/problems on
    almost all platforms. Notice that since this is always dealing with
    the top of the stolen memory, the problems are not so easy to
    reproduce - especially since FBC is still disabled by default.
    
    One of the major differences of this patch is that we now look at both
    the size and base address. By only looking at the size we were
    assuming that the reserved area was always at the very top of
    stolen, which is not always true.
    
    After we merge the patch series that allows user space to allocate
    stolen memory we'll be able to write IGT tests that maybe catch the
    bugs fixed by this patch.
    
    v2:
      - s/BIOS reserved/stolen reserved/g (Chris)
      - Don't DRM_ERROR if we can't do anything about it (Chris)
      - Improve debug messages (Chris).
      - Use the gen7 version instead of gen6 on HSW. Tom found some
        documentation problems, so I think with gen7 we're on the safer
        side (Tom).
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    3774eb50
i915_gem_stolen.c 16.1 KB