iocRegular
4.4: Absent ⚠️
4.8: Absent ⚠️
4.10: Absent ⚠️
4.13: Absent ⚠️
4.15: Absent ⚠️
4.18: Absent ⚠️
5.0: Absent ⚠️
5.3: Absent ⚠️
5.4: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
5.8: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
5.11: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
5.13: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
5.15: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
5.19: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
6.2: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
6.5: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
6.8: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
struct ioc_margins margins;
u32 period_us;
u32 timer_slack_ns;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
u64 vtime_base_rate;
s64 vtime_err;
seqcount_spinlock_t period_seqcount;
u64 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
bool weights_updated;
atomic_t hweight_gen;
u64 dfgv_period_at;
u64 dfgv_period_rem;
u64 dfgv_usage_us_sum;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
arm64: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
armhf: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
ppc64el: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
riscv64: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
aws: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
azure: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
gcp: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
lowlatency: ✅struct ioc {
struct rq_qos rqos;
bool enabled;
struct ioc_params params;
u32 period_us;
u32 margin_us;
u64 vrate_min;
u64 vrate_max;
spinlock_t lock;
struct timer_list timer;
struct list_head active_iocgs;
struct ioc_pcpu_stat *pcpu_stat;
enum ioc_running running;
atomic64_t vtime_rate;
seqcount_t period_seqcount;
u32 period_at;
u64 period_at_vtime;
atomic64_t cur_period;
int busy_level;
u64 inuse_margin_vtime;
bool weights_updated;
atomic_t hweight_gen;
u64 autop_too_fast_at;
u64 autop_too_slow_at;
int autop_idx;
bool user_qos_params;
bool user_cost_model;
};
Regular
5.4 and 5.8 ✅
5.8 and 5.11 ⚠️struct ioc_margins margins
u32 timer_slack_ns
u64 vtime_base_rate
s64 vtime_err
u64 dfgv_period_at
u64 dfgv_period_rem
u64 dfgv_usage_us_sum
u32 margin_us
u64 inuse_margin_vtime
seqcount_t period_seqcount ➡️ seqcount_spinlock_t period_seqcount
u32 period_at ➡️ u64 period_at
5.11 and 5.13 ✅
5.13 and 5.15 ✅
5.15 and 5.19 ✅
5.19 and 6.2 ✅
6.2 and 6.5 ✅
6.5 and 6.8 ✅
amd64 and arm64 ✅
amd64 and armhf ✅
amd64 and ppc64el ✅
amd64 and riscv64 ✅
generic and aws ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅