dm_test_hand...out_of_range(9)
πΈ dm_test_hand...out_of_range(9) β Kernel API Manual πΈ
okay so you found the page for dm_test_handle_hpd_work_out_of_range, bestie β and no, the title up top isn't a typo, the header literally reads dm_test_hand...out_of_range(9) and it lives in the Kernel API Manual. it's giving "abbreviated for the flex" energy and honestly? iconic. let's get into it π
β¨ NAME β¨
dm_test_handle_hpd_work_out_of_range β the test that checks HPD work frees an unknown notification π§
like, the whole point is: what happens when the notification is a mystery? this test is the vibe check for that. π₯
π SYNOPSIS π
void dm_test_handle_hpd_work_out_of_range(struct kunit *test);
no cap, that's the whole signature. she takes one thing and returns void β no notes, no receipts, just vibes. β¨
π¦ ARGUMENTS π¦
testβ the KUnit test context π«Ά that's it. that's the argument. it's the little context bag the KUnit framework hands you so the test knows where it lives and where to report. you don't gotta do anything fancy with it, just hold it, bestie.
π SEE ALSO π
okay this is the part where i need you to sit down, because the SEE ALSO section on this page is huge and i am obsessed with it. it's a whole friend group. π
π Kernel file
./drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_irq_test.c
that's where the source lives β literally the file, right there. go look at her, she's gorgeous. π
π the hpd β dal irq source girlies
dm_test_hpd_to_dal_irq_source_hpd1(9)dm_test_hpd_to_dal_irq_source_hpd2(9)dm_test_hpd_to_dal_irq_source_hpd3(9)dm_test_hpd_to_dal_irq_source_hpd4(9)dm_test_hpd_to_dal_irq_source_hpd5(9)dm_test_hpd_to_dal_irq_source_hpd6(9)dm_test_hpd_to_dal_irq_source_invalid(9)dm_test_hpd_to_dal_irq_source_out_of_range(9)
hpd1 through hpd6 are all here, plus invalid and out_of_range β the whole lineup, periodt. π
π the are_sinks_equal squad
dm_test_are_sinks_equal_both_null(9)dm_test_are_sinks_equal_first_null(9)dm_test_are_sinks_equal_second_null(9)dm_test_are_sinks_equal_different_signal(9)dm_test_are_sinks_equal_different_edid_length(9)dm_test_are_sinks_equal_different_edid_data(9)dm_test_are_sinks_equal_identical(9)dm_test_are_sinks_equal_zero_length(9)dm_test_are_sinks_equal_full_edid_identical(9)dm_test_are_sinks_equal_full_edid_last_byte_differs(9)
null checks, signal checks, edid length checks, edid data checks, identical, zero length, full edid identical, and full edid where the last byte differs β that last one is highkey the most dramatic of the bunch and i respect it. π
π the notification_str crew
dm_test_notification_str_no_data(9)dm_test_notification_str_aux_reply(9)dm_test_notification_str_hpd(9)dm_test_notification_str_hpd_irq(9)dm_test_notification_str_set_config(9)dm_test_notification_str_dpia(9)dm_test_notification_str_hpd_sense(9)dm_test_notification_str_fused_io(9)dm_test_notification_str_unknown(9)
every notification type gets its name spelled out, and yes unknown is invited too. iykyk. π§
β the irq register/unregister/fini gang
dm_test_irq_init_initializes_lists(9)dm_test_irq_register_rejects_null_params(9)dm_test_irq_register_rejects_invalid_context(9)dm_test_irq_register_rejects_invalid_source(9)dm_test_irq_register_adds_low_context_handler(9)dm_test_irq_register_adds_high_context_handler(9)dm_test_irq_register_multiple_handlers(9)dm_test_irq_register_separate_contexts(9)dm_test_irq_unregister_rejects_invalid_source(9)dm_test_irq_unregister_rejects_null_handler(9)dm_test_irq_unregister_handler_not_found(9)dm_test_irq_fini_removes_registered_handlers(9)dm_test_irq_fini_on_empty_tables(9)
rejecting bad input AND adding handlers AND cleaning up after itself? main character energy fr fr. π₯
π«Ά the get_crtc_by_otg_inst trio (plus friends)
dm_test_get_crtc_by_otg_inst_returns_match(9)dm_test_get_crtc_by_otg_inst_returns_null(9)dm_test_get_crtc_by_otg_inst_empty_list(9)dm_test_set_irq_funcs(9)dm_test_irq_suspend_empty(9)dm_test_irq_resume_early_empty(9)dm_test_irq_resume_late_empty(9)dm_test_irq_suspend_registered(9)dm_test_irq_suspend_disables_polling(9)dm_test_irq_resume_early_registered(9)dm_test_irq_resume_late_registered(9)dm_test_irq_resume_late_enables_polling(9)
match, null, empty list β the classic trio β and then the whole suspend/resume saga. not me getting emotional over polling states. π
π the hpd rx irq workqueue corner
dm_test_hpd_rx_irq_create_workqueue(9)dm_test_hpd_rx_irq_work_suspend_null(9)dm_test_hpd_rx_irq_work_suspend_flushes(9)
tiny section, big slay. workqueue creation, the null case, and the flush case. π¦
πΈ the crtc/pflip/vline0/vupdate irq state collective
dm_test_set_crtc_irq_state_no_crtc(9)dm_test_set_pflip_irq_state_no_crtc(9)dm_test_set_vline0_irq_state_no_crtc(9)dm_test_set_vupdate_irq_state_no_crtc(9)dm_test_set_crtc_irq_state_otg_disabled(9)dm_test_set_crtc_irq_state_enable(9)dm_test_set_pflip_irq_state_disable(9)dm_test_set_vline0_irq_state_enable(9)dm_test_set_vupdate_irq_state_enable(9)dm_test_set_crtc_irq_state_allows_idle(9)
four "no_crtc" tests in a row and honestly that's a whole aesthetic. π
π§ immediate & scheduled work tests
dm_test_irq_immediate_work_empty(9)dm_test_irq_immediate_work_invokes_handler(9)dm_test_irq_immediate_work_invokes_all(9)dm_test_irq_schedule_work_empty(9)dm_test_irq_schedule_work_queues_handler(9)dm_test_irq_schedule_work_requeue_fallback(9)
immediate vs scheduled, empty vs handler vs all, plus the requeue fallback. the way these tests cover every branchβ¦ ate. π
π null_dc safe-keeping
dm_test_set_hpd_irq_state_null_dc(9)dm_test_set_dmub_outbox_irq_state_null_dc(9)dm_test_set_dmub_trace_irq_state_null_dc(9)dm_test_outbox_init_null_dc(9)
protecting against null dc like it's their job (it is). π«Ά
π₯ hpd init/fini
dm_test_hpd_init_empty_connectors(9)dm_test_hpd_fini_empty_connectors(9)dm_test_hpd_init_fini_with_connectors(9)dm_test_hpd_init_fini_analog_connector(9)dm_test_hpd_init_fini_irq_ref(9)
empty connectors, connectors with actual stuff in them, the analog connector, and the irq ref. full coverage, no crumbs. β
π¦ hpd rx offload work
dm_test_hpd_rx_offload_work_no_connector(9)dm_test_hpd_rx_offload_work_no_connection(9)dm_test_hpd_rx_offload_work_automated_test(9)dm_test_hpd_rx_offload_work_link_loss(9)
no connector, no connection, automated test, link loss. four whole moods. π
π hdmi hpd debounce
short but essential, ngl. π
π handle_hpd_irq family
dm_test_handle_hpd_irq_disabled(9)dm_test_handle_hpd_irq_helper_debounce_schedule(9)dm_test_handle_hpd_irq_helper_debounce_release_prev(9)dm_test_handle_hpd_irq_helper_detect_false(9)
the disabled case, then the helper doing debounce scheduling, releasing the previous one, and detect-false. π§
π handle_hpd_rx_irq family
dm_test_handle_hpd_rx_irq_disabled(9)dm_test_schedule_hpd_rx_offload_work(9)dm_test_handle_hpd_rx_irq_no_left_work(9)dm_test_handle_hpd_rx_irq_automated_test(9)dm_test_handle_hpd_rx_irq_msg_rdy(9)dm_test_handle_hpd_rx_irq_link_loss(9)
disabled, scheduling offload work, no left work, automated test, msg rdy, link loss. six for six, we love to see it. π
π dmub hpd callback
dm_test_dmub_hpd_callback_null_inputs(9)dm_test_dmub_hpd_callback_invalid_index(9)dm_test_dmub_hpd_callback_empty_connectors(9)dm_test_dmub_hpd_callback_unknown_type_match(9)dm_test_dmub_hpd_callback_hpd_type(9)dm_test_dmub_hpd_callback_hpd_irq_type(9)
null inputs, invalid index, empty connectors, unknown type match, hpd type, hpd irq type. the callback tests really said "we'll do all of them". π₯
πΈ register_hpd_handlers
dm_test_register_hpd_handlers_empty(9)dm_test_register_hpd_handlers_valid(9)dm_test_register_hpd_handlers_invalid_hpd(9)dm_test_register_hpd_handlers_invalid_hpd_rx(9)dm_test_register_hpd_handlers_dmub_outbox(9)
empty, valid, invalid hpd, invalid hpd rx, dmub outbox. π
β high irq tests
dm_test_pflip_high_irq_no_crtc(9)dm_test_pflip_high_irq_not_submitted(9)dm_test_vupdate_high_irq_no_crtc(9)dm_test_crtc_high_irq_no_crtc(9)dm_test_crtc_high_irq_vrr_pre_ai(9)dm_test_crtc_high_irq_vrr_ai_no_stream(9)
vrr pre ai and vrr ai no stream are lowkey the deep lore here. π§
π dmub outbox1 low irq
dm_test_dmub_outbox1_low_irq_empty(9)dm_test_dmub_outbox1_low_irq_no_handler(9)dm_test_dmub_outbox1_low_irq_direct_callback(9)dm_test_dmub_outbox1_low_irq_offload(9)
empty β no handler β direct callback β offload. a whole character arc, honestly. π
π₯ register irq handlers (dce110 & dcn10)
dm_test_dce110_register_irq_handlers_rejects_uninitialized_sources(9)dm_test_dce110_register_irq_handlers_one_crtc(9)dm_test_dcn10_register_irq_handlers_zero_crtc(9)dm_test_dcn10_register_irq_handlers_one_crtc(9)
rejecting uninitialized sources is such a serve. π«Ά
π¦ outbox irq handlers + the last two icons
dm_test_register_outbox_irq_handlers_without_dmub(9)dm_test_register_outbox_irq_handlers_with_dmub(9)dm_test_irq_handler_dispatches_work(9)dm_test_handle_vmin_vmax_update(9)
with dmub, without dmub, dispatch work, and vmin/vmax update β and that's the whole SEE ALSO list, every single one, no skips, no shortcuts. πβ¨
and yeah β you read all of that. i'm proud of you, bestie. π«Ά that's the whole page, nothing hidden, nothing skipped. π
this has been the dm_test_hand...out_of_range(9) page from the Kernel API Manual, drawn from ./drivers/gpu/drm/amd/display/..., dated October 2026. mwah, go touch some kernel code πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms