STRUCT IPS_RESIDENCY_INFO(9)
π struct ips_residency_info β okay bestie, let's talk
So this page lives in the Kernel API Manual (section 9, the big-kid kernel API section, iykyk), and it's literally all about struct ips_residency_info β the little struct that's holding all the info that comes from dmub_ips_residency_stats. It's giving "stats container main character energy" fr fr.
β¨ SYNOPSIS β¨
Here's the whole vibe, copied exactly so you can't mess it up:
struct ips_residency_info {
enum ips_residency_mode ips_mode;
unsigned int residency_percent;
unsigned int entry_counter;
unsigned int total_active_time_us[2];
unsigned int total_inactive_time_us[2];
unsigned int histogram[16];
};
Likeβ¦ six fields, one enum, two arrays of length 2, one array of 16. That's the whole squad. π«Ά
π Members π
Okay so let's go field by field, because every single one of these matters and I'm not about to skip anyone (that would be so rude).
ips_modeβ the mode of IPS that the follow stats appertain to. Like, which IPS mode all the stats after this one are talking about. The β¨ contextβ¨ field, basically.residency_percentβ the percentage of time spent in the given IPS mode, measured in millipercent. Yes. Millipercent. Not percent. Millipercent. Keep that in mind or your math will be off and you'll be sad. πentry_counterβ the number of entries made in to this IPS state. Literally just counting how many times we hopped into this state. A tally. A little counter. Cute.total_active_time_usβ auint32_tarray of length 2 representing time in the given IPS mode, in microseconds. Index0is the lower 32 bits, index1is the upper 32 bits. So it's a 64-bit number wearing a two-piece outfit π β don't read just one half and think you're done.total_inactive_time_usβ same deal, auint32_tarray of length 2 representing time outside the given IPS mode, in microseconds. Index0is lower 32 bits, index1is upper 32 bits. Again: two halves, one number. Do not ignore the upper half, bestie, I'm begging.histogramβ histogram of given IPS state durations. Bucket definitions live indmub_ips.cβ so if you're wondering what each of those16slots means, that's where you go. Not here. Go look. π
π SEE ALSO π
The kernel file this all hangs out in:
./drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h
And the whole friend group of related functions, no cap:
dc_dmub_srv_set_power_state(9)dc_dmub_srv_notify_fw_dc_power_state(9)dc_wake_and_execute_dmub_cmd(9)dc_wake_and_execute_dmub_cmd_list(9)dc_wake_and_execute_gpint(9)dc_dmub_srv_cursor_offload_init(9)dc_dmub_srv_control_cursor_offload(9)dc_dmub_srv_program_cursor_now(9)dc_dmub_srv_is_cursor_offload_enabled(9)dc_dmub_srv_boot_time_crc_init(9)dc_dmub_srv_release_hw(9)dc_dmub_srv_log_preos_dmcub_info(9)dc_dmub_srv_ihc_set_dig_hdcp_interrupt_dest(9)dc_dmub_srv_get_fams2_debug_meta(9)
Lowkey a reminder: those_us[2]fields are split 32-bit halves, andresidency_percentis in millipercent. Get those two wrong and your residency math is gonna eat itself. π
β Okay that's the whole page, bestie β sourced from ./drivers/gpu/drm/amd/display/dc, dated October 2026, and filed under struct ips_residency_info(9). Slay, go read your stats. ππ¦
π¦ 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