• Jim Cromie's avatar
    drm_print: optimize drm_debug_enabled for jump-label · 6ce6fae8
    Jim Cromie authored
    When CONFIG_DRM_USE_DYNAMIC_DEBUG=y, the drm.debug API (a macro stack,
    calling _+drm_*dbg() eventually) invokes a dyndbg Factory macro to
    create a descriptor for each callsite, thus making them individually
    >control-able.
    
    In this case, the calls to _drm_*dbg are unreachable unless the
    callsite is enabled.  So those calls can short-circuit their early
    do-nothing returns.  Provide and use __drm_debug_enabled(), to do this
    when config'd, or the _raw flags-check otherwize.
    
    And since dyndbg is in use, lets also instrument the remaining users
    of drm_debug_enabled, by wrapping the _raw in a macro with a:
    
      pr_debug("todo: is this frequent enough to optimize ?\n");
    
    For CONFIG_DRM_USE_DYNAMIC_DEBUG=n, do no site instrumenting at all,
    since JUMP_LABEL might be off, and we don't want to make work.
    
    With drm, amdgpu, i915, nouveau loaded, heres remaining uses of
    drm_debug_enabled(), which costs ~1.5kb data to control the
    pr_debug("todo:..")s.
    
    Some of those uses might be ok to use __drm_debug_enabled() by
    inspection, others might warrant conversion to use dyndbg Factory
    macros, and that would want callrate data to estimate the savings
    possible.  TBH, any remaining savings are probably small; drm.debug
    covers the vast bulk of the uses.  Maybe "vblank" is the exception.
    
    :#> grep todo /proc/dynamic_debug/control | wc
         21     168    2357
    :#> grep todo /proc/dynamic_debug/control
    drivers/gpu/drm/drm_edid_load.c:178 [drm]edid_load =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/drm_vblank.c:410 [drm]drm_crtc_accurate_vblank_count =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/drm_vblank.c:787 [drm]drm_crtc_vblank_helper_get_vblank_timestamp_internal =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/drm_vblank.c:1491 [drm]drm_vblank_restore =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/drm_vblank.c:1433 [drm]drm_vblank_enable =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/drm_plane.c:2168 [drm]drm_mode_setplane =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/display/drm_dp_mst_topology.c:1359 [drm_display_helper]drm_dp_mst_wait_tx_reply =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/display/drm_dp_mst_topology.c:2864 [drm_display_helper]process_single_tx_qlock =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/display/drm_dp_mst_topology.c:2909 [drm_display_helper]drm_dp_queue_down_tx =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/display/drm_dp_mst_topology.c:1686 [drm_display_helper]drm_dp_mst_update_slots =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_dp.c:1111 [i915]intel_dp_print_rates =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_backlight.c:5434 [i915]cnp_enable_backlight =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_backlight.c:5459 [i915]intel_backlight_device_register =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_opregion.c:43 [i915]intel_opregion_notify_encoder =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_opregion.c:53 [i915]asle_set_backlight =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_bios.c:1088 [i915]intel_bios_is_dsi_present =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/display/intel_display_debugfs.c:6153 [i915]i915_drrs_ctl_set =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/intel_pcode.c:26 [i915]snb_pcode_read =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/i915/i915_getparam.c:785 [i915]i915_getparam_ioctl =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c:282 [amdgpu]vcn_v2_5_process_interrupt =_ "todo: maybe avoid via dyndbg\n"
    drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c:433 [amdgpu]vcn_v2_0_process_interrupt =_ "todo: maybe avoid via dyndbg\n"
    :#>
    Signed-off-by: default avatarJim Cromie <jim.cromie@gmail.com>
    Link: https://lore.kernel.org/r/20220912052852.1123868-8-jim.cromie@gmail.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6ce6fae8
drm_print.h 18.9 KB