• Michael D Labriola's avatar
    drm: change func to better detect wether swiotlb is needed · 913b2cb7
    Michael D Labriola authored
    This commit fixes DRM failures on Xen PV systems that were introduced in
    v4.17 by the following commits:
    
    82626363 drm: add func to get max iomem address v2
    fd5fd480 drm/amdgpu: only enable swiotlb alloc when need v2
    1bc3d3cc drm/radeon: only enable swiotlb path when need v2
    
    The introduction of ->need_swiotlb to the ttm_dma_populate() conditionals
    in the radeon and amdgpu device drivers causes Gnome to immediately crash
    on Xen PV systems, returning the user to the login screen.  The following
    kernel errors get logged:
    
    [   28.554259] radeon_dp_aux_transfer_native: 200 callbacks suppressed
    [   31.219821] radeon 0000:01:00.0: swiotlb buffer is full (sz: 2097152 bytes)
    [   31.220030] [drm:radeon_gem_object_create [radeon]] *ERROR* Failed to allocate GEM object (16384000, 2, 4096, -14)
    [   31.226109] radeon 0000:01:00.0: swiotlb buffer is full (sz: 2097152 bytes)
    [   31.226300] [drm:radeon_gem_object_create [radeon]] *ERROR* Failed to allocate GEM object (16384000, 2, 4096, -14)
    [   31.300734] gnome-shell[1935]: segfault at 88 ip 00007f39151cd904 sp 00007ffc97611ad8 error 4 in libmutter-cogl.so[7f3915178000+aa000]
    [   31.300745] Code: 5f c3 0f 1f 40 00 48 8b 47 78 48 8b 40 40 ff e0 66 0f 1f 44 00 00 48 8b 47 78 48 8b 40 48 ff e0 66 0f 1f 44 00 00 48 8b 47 78 <48> 8b 80 88 00 00 00 ff e0 0f 1f 00 48 8b 47 78 48 8b 40 68 ff e0
    [   38.193302] radeon_dp_aux_transfer_native: 116 callbacks suppressed
    [   40.009317] radeon 0000:01:00.0: swiotlb buffer is full (sz: 2097152 bytes)
    [   40.009488] [drm:radeon_gem_object_create [radeon]] *ERROR* Failed to allocate GEM object (16384000, 2, 4096, -14)
    [   40.015114] radeon 0000:01:00.0: swiotlb buffer is full (sz: 2097152 bytes)
    [   40.015297] [drm:radeon_gem_object_create [radeon]] *ERROR* Failed to allocate GEM object (16384000, 2, 4096, -14)
    [   40.028302] gnome-shell[2431]: segfault at 2dadf40 ip 0000000002dadf40 sp 00007ffcd24ea5f8 error 15
    [   40.028306] Code: 20 6e 31 00 00 00 00 00 00 00 00 37 e3 3d 2d 7f 00 00 80 f4 e6 3d 2d 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <00> 00 00 00 00 00 00 00 c1 00 00 00 00 00 00 00 80 e1 d2 03 00 00
    
    This commit renames drm_get_max_iomem() to drm_need_swiotlb(), adds a
    xen_pv_domain() check to it, and moves the bit shifting comparison that
    always follows its usage into the function (simplifying the drm driver
    code).
    Signed-off-by: default avatarMichael D Labriola <michael.d.labriola@gmail.com>
    Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
    Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
    Link: https://patchwork.freedesktop.org/patch/286987/
    913b2cb7
gmc_v9_0.c 34.9 KB