• Rodrigo Siqueira's avatar
    drm/amd/display: Rework dsc to isolate FPU operations · 9ec051bf
    Rodrigo Siqueira authored
    When we want to use float point operation on Linux
    we need to use within special kernel protection
    (`kernel_fpu_{begin,end}()`.), otherwise the kernel
    can clobber userspace FPU register state. For detecting
    these issues we use a tool named objtool (with -Ffa
    flags) to highlight the FPU problems, all warnings can
    be summed up as follows:
    
    ./tools/objtool/objtool check -Ffa
    drivers/gpu/drm/amd/display/dc/dml/dml_common_defs.o
    
    [..] dc/dsc/rc_calc.o: warning: objtool: get_qp_set()+0x2f8:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc.o: warning: objtool: dsc_roundf()+0x5:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc.o: warning: objtool: dsc_ceil()+0x5:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc.o: warning: objtool: get_ofs_set()+0x3eb:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc.o: warning: objtool: calc_rc_params()+0x3c:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/dc_dsc.o: warning: objtool:
    get_dsc_bandwidth_range.isra.0()+0x8d:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/dc_dsc.o: warning: objtool: setup_dsc_config()+0x2ef:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc_dpi.o: warning: objtool:copy_pps_fields()+0xbb:
    FPU instruction outside of kernel_fpu_{begin,end}()
    [..] dc/dsc/rc_calc_dpi.o: warning: objtool:
    dscc_compute_dsc_parameters()+0x7b:
    FPU instruction outside of kernel_fpu_{begin,end}()
    
    This commit fixes the above issues by rework DSC as described:
    
    1. Isolate all FPU operations in a single file;
    2. Use FPU flags only in the file that handles FPU operations;
    3. Isolate all functions that require float point operation in static
       functions;
    4. Add a mid-layer function that does not use any float point operation,
       and that could be safely invoked in other parts of the code.
    5. Keep float point operation under DC_FP_{START/END} macro.
    
    CC: Christian König <christian.koenig@amd.com>
    CC: Alexander Deucher <Alexander.Deucher@amd.com>
    CC: Peter Zijlstra <peterz@infradead.org>
    CC: Tony Cheng <tony.cheng@amd.com>
    CC: Harry Wentland <hwentlan@amd.com>
    Signed-off-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Reviewed-by: default avatarMikita Lipski <Mikita.Lipski@amd.com>
    Acked-by: default avatarQingqing Zhuo <qingqing.zhuo@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    9ec051bf
dc_dsc.c 30 KB