xref: /openbmc/linux/block/blk-iocost.c (revision a16be368)
1 /* SPDX-License-Identifier: GPL-2.0
2  *
3  * IO cost model based controller.
4  *
5  * Copyright (C) 2019 Tejun Heo <tj@kernel.org>
6  * Copyright (C) 2019 Andy Newell <newella@fb.com>
7  * Copyright (C) 2019 Facebook
8  *
9  * One challenge of controlling IO resources is the lack of trivially
10  * observable cost metric.  This is distinguished from CPU and memory where
11  * wallclock time and the number of bytes can serve as accurate enough
12  * approximations.
13  *
14  * Bandwidth and iops are the most commonly used metrics for IO devices but
15  * depending on the type and specifics of the device, different IO patterns
16  * easily lead to multiple orders of magnitude variations rendering them
17  * useless for the purpose of IO capacity distribution.  While on-device
18  * time, with a lot of clutches, could serve as a useful approximation for
19  * non-queued rotational devices, this is no longer viable with modern
20  * devices, even the rotational ones.
21  *
22  * While there is no cost metric we can trivially observe, it isn't a
23  * complete mystery.  For example, on a rotational device, seek cost
24  * dominates while a contiguous transfer contributes a smaller amount
25  * proportional to the size.  If we can characterize at least the relative
26  * costs of these different types of IOs, it should be possible to
27  * implement a reasonable work-conserving proportional IO resource
28  * distribution.
29  *
30  * 1. IO Cost Model
31  *
32  * IO cost model estimates the cost of an IO given its basic parameters and
33  * history (e.g. the end sector of the last IO).  The cost is measured in
34  * device time.  If a given IO is estimated to cost 10ms, the device should
35  * be able to process ~100 of those IOs in a second.
36  *
37  * Currently, there's only one builtin cost model - linear.  Each IO is
38  * classified as sequential or random and given a base cost accordingly.
39  * On top of that, a size cost proportional to the length of the IO is
40  * added.  While simple, this model captures the operational
41  * characteristics of a wide varienty of devices well enough.  Default
42  * paramters for several different classes of devices are provided and the
43  * parameters can be configured from userspace via
44  * /sys/fs/cgroup/io.cost.model.
45  *
46  * If needed, tools/cgroup/iocost_coef_gen.py can be used to generate
47  * device-specific coefficients.
48  *
49  * 2. Control Strategy
50  *
51  * The device virtual time (vtime) is used as the primary control metric.
52  * The control strategy is composed of the following three parts.
53  *
54  * 2-1. Vtime Distribution
55  *
56  * When a cgroup becomes active in terms of IOs, its hierarchical share is
57  * calculated.  Please consider the following hierarchy where the numbers
58  * inside parentheses denote the configured weights.
59  *
60  *           root
61  *         /       \
62  *      A (w:100)  B (w:300)
63  *      /       \
64  *  A0 (w:100)  A1 (w:100)
65  *
66  * If B is idle and only A0 and A1 are actively issuing IOs, as the two are
67  * of equal weight, each gets 50% share.  If then B starts issuing IOs, B
68  * gets 300/(100+300) or 75% share, and A0 and A1 equally splits the rest,
69  * 12.5% each.  The distribution mechanism only cares about these flattened
70  * shares.  They're called hweights (hierarchical weights) and always add
71  * upto 1 (HWEIGHT_WHOLE).
72  *
73  * A given cgroup's vtime runs slower in inverse proportion to its hweight.
74  * For example, with 12.5% weight, A0's time runs 8 times slower (100/12.5)
75  * against the device vtime - an IO which takes 10ms on the underlying
76  * device is considered to take 80ms on A0.
77  *
78  * This constitutes the basis of IO capacity distribution.  Each cgroup's
79  * vtime is running at a rate determined by its hweight.  A cgroup tracks
80  * the vtime consumed by past IOs and can issue a new IO iff doing so
81  * wouldn't outrun the current device vtime.  Otherwise, the IO is
82  * suspended until the vtime has progressed enough to cover it.
83  *
84  * 2-2. Vrate Adjustment
85  *
86  * It's unrealistic to expect the cost model to be perfect.  There are too
87  * many devices and even on the same device the overall performance
88  * fluctuates depending on numerous factors such as IO mixture and device
89  * internal garbage collection.  The controller needs to adapt dynamically.
90  *
91  * This is achieved by adjusting the overall IO rate according to how busy
92  * the device is.  If the device becomes overloaded, we're sending down too
93  * many IOs and should generally slow down.  If there are waiting issuers
94  * but the device isn't saturated, we're issuing too few and should
95  * generally speed up.
96  *
97  * To slow down, we lower the vrate - the rate at which the device vtime
98  * passes compared to the wall clock.  For example, if the vtime is running
99  * at the vrate of 75%, all cgroups added up would only be able to issue
100  * 750ms worth of IOs per second, and vice-versa for speeding up.
101  *
102  * Device business is determined using two criteria - rq wait and
103  * completion latencies.
104  *
105  * When a device gets saturated, the on-device and then the request queues
106  * fill up and a bio which is ready to be issued has to wait for a request
107  * to become available.  When this delay becomes noticeable, it's a clear
108  * indication that the device is saturated and we lower the vrate.  This
109  * saturation signal is fairly conservative as it only triggers when both
110  * hardware and software queues are filled up, and is used as the default
111  * busy signal.
112  *
113  * As devices can have deep queues and be unfair in how the queued commands
114  * are executed, soley depending on rq wait may not result in satisfactory
115  * control quality.  For a better control quality, completion latency QoS
116  * parameters can be configured so that the device is considered saturated
117  * if N'th percentile completion latency rises above the set point.
118  *
119  * The completion latency requirements are a function of both the
120  * underlying device characteristics and the desired IO latency quality of
121  * service.  There is an inherent trade-off - the tighter the latency QoS,
122  * the higher the bandwidth lossage.  Latency QoS is disabled by default
123  * and can be set through /sys/fs/cgroup/io.cost.qos.
124  *
125  * 2-3. Work Conservation
126  *
127  * Imagine two cgroups A and B with equal weights.  A is issuing a small IO
128  * periodically while B is sending out enough parallel IOs to saturate the
129  * device on its own.  Let's say A's usage amounts to 100ms worth of IO
130  * cost per second, i.e., 10% of the device capacity.  The naive
131  * distribution of half and half would lead to 60% utilization of the
132  * device, a significant reduction in the total amount of work done
133  * compared to free-for-all competition.  This is too high a cost to pay
134  * for IO control.
135  *
136  * To conserve the total amount of work done, we keep track of how much
137  * each active cgroup is actually using and yield part of its weight if
138  * there are other cgroups which can make use of it.  In the above case,
139  * A's weight will be lowered so that it hovers above the actual usage and
140  * B would be able to use the rest.
141  *
142  * As we don't want to penalize a cgroup for donating its weight, the
143  * surplus weight adjustment factors in a margin and has an immediate
144  * snapback mechanism in case the cgroup needs more IO vtime for itself.
145  *
146  * Note that adjusting down surplus weights has the same effects as
147  * accelerating vtime for other cgroups and work conservation can also be
148  * implemented by adjusting vrate dynamically.  However, squaring who can
149  * donate and should take back how much requires hweight propagations
150  * anyway making it easier to implement and understand as a separate
151  * mechanism.
152  *
153  * 3. Monitoring
154  *
155  * Instead of debugfs or other clumsy monitoring mechanisms, this
156  * controller uses a drgn based monitoring script -
157  * tools/cgroup/iocost_monitor.py.  For details on drgn, please see
158  * https://github.com/osandov/drgn.  The ouput looks like the following.
159  *
160  *  sdb RUN   per=300ms cur_per=234.218:v203.695 busy= +1 vrate= 62.12%
161  *                 active      weight      hweight% inflt% dbt  delay usages%
162  *  test/a              *    50/   50  33.33/ 33.33  27.65   2  0*041 033:033:033
163  *  test/b              *   100/  100  66.67/ 66.67  17.56   0  0*000 066:079:077
164  *
165  * - per	: Timer period
166  * - cur_per	: Internal wall and device vtime clock
167  * - vrate	: Device virtual time rate against wall clock
168  * - weight	: Surplus-adjusted and configured weights
169  * - hweight	: Surplus-adjusted and configured hierarchical weights
170  * - inflt	: The percentage of in-flight IO cost at the end of last period
171  * - del_ms	: Deferred issuer delay induction level and duration
172  * - usages	: Usage history
173  */
174 
175 #include <linux/kernel.h>
176 #include <linux/module.h>
177 #include <linux/timer.h>
178 #include <linux/time64.h>
179 #include <linux/parser.h>
180 #include <linux/sched/signal.h>
181 #include <linux/blk-cgroup.h>
182 #include "blk-rq-qos.h"
183 #include "blk-stat.h"
184 #include "blk-wbt.h"
185 
186 #ifdef CONFIG_TRACEPOINTS
187 
188 /* copied from TRACE_CGROUP_PATH, see cgroup-internal.h */
189 #define TRACE_IOCG_PATH_LEN 1024
190 static DEFINE_SPINLOCK(trace_iocg_path_lock);
191 static char trace_iocg_path[TRACE_IOCG_PATH_LEN];
192 
193 #define TRACE_IOCG_PATH(type, iocg, ...)					\
194 	do {									\
195 		unsigned long flags;						\
196 		if (trace_iocost_##type##_enabled()) {				\
197 			spin_lock_irqsave(&trace_iocg_path_lock, flags);	\
198 			cgroup_path(iocg_to_blkg(iocg)->blkcg->css.cgroup,	\
199 				    trace_iocg_path, TRACE_IOCG_PATH_LEN);	\
200 			trace_iocost_##type(iocg, trace_iocg_path,		\
201 					      ##__VA_ARGS__);			\
202 			spin_unlock_irqrestore(&trace_iocg_path_lock, flags);	\
203 		}								\
204 	} while (0)
205 
206 #else	/* CONFIG_TRACE_POINTS */
207 #define TRACE_IOCG_PATH(type, iocg, ...)	do { } while (0)
208 #endif	/* CONFIG_TRACE_POINTS */
209 
210 enum {
211 	MILLION			= 1000000,
212 
213 	/* timer period is calculated from latency requirements, bound it */
214 	MIN_PERIOD		= USEC_PER_MSEC,
215 	MAX_PERIOD		= USEC_PER_SEC,
216 
217 	/*
218 	 * A cgroup's vtime can run 50% behind the device vtime, which
219 	 * serves as its IO credit buffer.  Surplus weight adjustment is
220 	 * immediately canceled if the vtime margin runs below 10%.
221 	 */
222 	MARGIN_PCT		= 50,
223 	INUSE_MARGIN_PCT	= 10,
224 
225 	/* Have some play in waitq timer operations */
226 	WAITQ_TIMER_MARGIN_PCT	= 5,
227 
228 	/*
229 	 * vtime can wrap well within a reasonable uptime when vrate is
230 	 * consistently raised.  Don't trust recorded cgroup vtime if the
231 	 * period counter indicates that it's older than 5mins.
232 	 */
233 	VTIME_VALID_DUR		= 300 * USEC_PER_SEC,
234 
235 	/*
236 	 * Remember the past three non-zero usages and use the max for
237 	 * surplus calculation.  Three slots guarantee that we remember one
238 	 * full period usage from the last active stretch even after
239 	 * partial deactivation and re-activation periods.  Don't start
240 	 * giving away weight before collecting two data points to prevent
241 	 * hweight adjustments based on one partial activation period.
242 	 */
243 	NR_USAGE_SLOTS		= 3,
244 	MIN_VALID_USAGES	= 2,
245 
246 	/* 1/64k is granular enough and can easily be handled w/ u32 */
247 	HWEIGHT_WHOLE		= 1 << 16,
248 
249 	/*
250 	 * As vtime is used to calculate the cost of each IO, it needs to
251 	 * be fairly high precision.  For example, it should be able to
252 	 * represent the cost of a single page worth of discard with
253 	 * suffificient accuracy.  At the same time, it should be able to
254 	 * represent reasonably long enough durations to be useful and
255 	 * convenient during operation.
256 	 *
257 	 * 1s worth of vtime is 2^37.  This gives us both sub-nanosecond
258 	 * granularity and days of wrap-around time even at extreme vrates.
259 	 */
260 	VTIME_PER_SEC_SHIFT	= 37,
261 	VTIME_PER_SEC		= 1LLU << VTIME_PER_SEC_SHIFT,
262 	VTIME_PER_USEC		= VTIME_PER_SEC / USEC_PER_SEC,
263 	VTIME_PER_NSEC		= VTIME_PER_SEC / NSEC_PER_SEC,
264 
265 	/* bound vrate adjustments within two orders of magnitude */
266 	VRATE_MIN_PPM		= 10000,	/* 1% */
267 	VRATE_MAX_PPM		= 100000000,	/* 10000% */
268 
269 	VRATE_MIN		= VTIME_PER_USEC * VRATE_MIN_PPM / MILLION,
270 	VRATE_CLAMP_ADJ_PCT	= 4,
271 
272 	/* if IOs end up waiting for requests, issue less */
273 	RQ_WAIT_BUSY_PCT	= 5,
274 
275 	/* unbusy hysterisis */
276 	UNBUSY_THR_PCT		= 75,
277 
278 	/* don't let cmds which take a very long time pin lagging for too long */
279 	MAX_LAGGING_PERIODS	= 10,
280 
281 	/*
282 	 * If usage% * 1.25 + 2% is lower than hweight% by more than 3%,
283 	 * donate the surplus.
284 	 */
285 	SURPLUS_SCALE_PCT	= 125,			/* * 125% */
286 	SURPLUS_SCALE_ABS	= HWEIGHT_WHOLE / 50,	/* + 2% */
287 	SURPLUS_MIN_ADJ_DELTA	= HWEIGHT_WHOLE / 33,	/* 3% */
288 
289 	/* switch iff the conditions are met for longer than this */
290 	AUTOP_CYCLE_NSEC	= 10LLU * NSEC_PER_SEC,
291 
292 	/*
293 	 * Count IO size in 4k pages.  The 12bit shift helps keeping
294 	 * size-proportional components of cost calculation in closer
295 	 * numbers of digits to per-IO cost components.
296 	 */
297 	IOC_PAGE_SHIFT		= 12,
298 	IOC_PAGE_SIZE		= 1 << IOC_PAGE_SHIFT,
299 	IOC_SECT_TO_PAGE_SHIFT	= IOC_PAGE_SHIFT - SECTOR_SHIFT,
300 
301 	/* if apart further than 16M, consider randio for linear model */
302 	LCOEF_RANDIO_PAGES	= 4096,
303 };
304 
305 enum ioc_running {
306 	IOC_IDLE,
307 	IOC_RUNNING,
308 	IOC_STOP,
309 };
310 
311 /* io.cost.qos controls including per-dev enable of the whole controller */
312 enum {
313 	QOS_ENABLE,
314 	QOS_CTRL,
315 	NR_QOS_CTRL_PARAMS,
316 };
317 
318 /* io.cost.qos params */
319 enum {
320 	QOS_RPPM,
321 	QOS_RLAT,
322 	QOS_WPPM,
323 	QOS_WLAT,
324 	QOS_MIN,
325 	QOS_MAX,
326 	NR_QOS_PARAMS,
327 };
328 
329 /* io.cost.model controls */
330 enum {
331 	COST_CTRL,
332 	COST_MODEL,
333 	NR_COST_CTRL_PARAMS,
334 };
335 
336 /* builtin linear cost model coefficients */
337 enum {
338 	I_LCOEF_RBPS,
339 	I_LCOEF_RSEQIOPS,
340 	I_LCOEF_RRANDIOPS,
341 	I_LCOEF_WBPS,
342 	I_LCOEF_WSEQIOPS,
343 	I_LCOEF_WRANDIOPS,
344 	NR_I_LCOEFS,
345 };
346 
347 enum {
348 	LCOEF_RPAGE,
349 	LCOEF_RSEQIO,
350 	LCOEF_RRANDIO,
351 	LCOEF_WPAGE,
352 	LCOEF_WSEQIO,
353 	LCOEF_WRANDIO,
354 	NR_LCOEFS,
355 };
356 
357 enum {
358 	AUTOP_INVALID,
359 	AUTOP_HDD,
360 	AUTOP_SSD_QD1,
361 	AUTOP_SSD_DFL,
362 	AUTOP_SSD_FAST,
363 };
364 
365 struct ioc_gq;
366 
367 struct ioc_params {
368 	u32				qos[NR_QOS_PARAMS];
369 	u64				i_lcoefs[NR_I_LCOEFS];
370 	u64				lcoefs[NR_LCOEFS];
371 	u32				too_fast_vrate_pct;
372 	u32				too_slow_vrate_pct;
373 };
374 
375 struct ioc_missed {
376 	u32				nr_met;
377 	u32				nr_missed;
378 	u32				last_met;
379 	u32				last_missed;
380 };
381 
382 struct ioc_pcpu_stat {
383 	struct ioc_missed		missed[2];
384 
385 	u64				rq_wait_ns;
386 	u64				last_rq_wait_ns;
387 };
388 
389 /* per device */
390 struct ioc {
391 	struct rq_qos			rqos;
392 
393 	bool				enabled;
394 
395 	struct ioc_params		params;
396 	u32				period_us;
397 	u32				margin_us;
398 	u64				vrate_min;
399 	u64				vrate_max;
400 
401 	spinlock_t			lock;
402 	struct timer_list		timer;
403 	struct list_head		active_iocgs;	/* active cgroups */
404 	struct ioc_pcpu_stat __percpu	*pcpu_stat;
405 
406 	enum ioc_running		running;
407 	atomic64_t			vtime_rate;
408 
409 	seqcount_t			period_seqcount;
410 	u32				period_at;	/* wallclock starttime */
411 	u64				period_at_vtime; /* vtime starttime */
412 
413 	atomic64_t			cur_period;	/* inc'd each period */
414 	int				busy_level;	/* saturation history */
415 
416 	u64				inuse_margin_vtime;
417 	bool				weights_updated;
418 	atomic_t			hweight_gen;	/* for lazy hweights */
419 
420 	u64				autop_too_fast_at;
421 	u64				autop_too_slow_at;
422 	int				autop_idx;
423 	bool				user_qos_params:1;
424 	bool				user_cost_model:1;
425 };
426 
427 /* per device-cgroup pair */
428 struct ioc_gq {
429 	struct blkg_policy_data		pd;
430 	struct ioc			*ioc;
431 
432 	/*
433 	 * A iocg can get its weight from two sources - an explicit
434 	 * per-device-cgroup configuration or the default weight of the
435 	 * cgroup.  `cfg_weight` is the explicit per-device-cgroup
436 	 * configuration.  `weight` is the effective considering both
437 	 * sources.
438 	 *
439 	 * When an idle cgroup becomes active its `active` goes from 0 to
440 	 * `weight`.  `inuse` is the surplus adjusted active weight.
441 	 * `active` and `inuse` are used to calculate `hweight_active` and
442 	 * `hweight_inuse`.
443 	 *
444 	 * `last_inuse` remembers `inuse` while an iocg is idle to persist
445 	 * surplus adjustments.
446 	 */
447 	u32				cfg_weight;
448 	u32				weight;
449 	u32				active;
450 	u32				inuse;
451 	u32				last_inuse;
452 
453 	sector_t			cursor;		/* to detect randio */
454 
455 	/*
456 	 * `vtime` is this iocg's vtime cursor which progresses as IOs are
457 	 * issued.  If lagging behind device vtime, the delta represents
458 	 * the currently available IO budget.  If runnning ahead, the
459 	 * overage.
460 	 *
461 	 * `vtime_done` is the same but progressed on completion rather
462 	 * than issue.  The delta behind `vtime` represents the cost of
463 	 * currently in-flight IOs.
464 	 *
465 	 * `last_vtime` is used to remember `vtime` at the end of the last
466 	 * period to calculate utilization.
467 	 */
468 	atomic64_t			vtime;
469 	atomic64_t			done_vtime;
470 	u64				abs_vdebt;
471 	u64				last_vtime;
472 
473 	/*
474 	 * The period this iocg was last active in.  Used for deactivation
475 	 * and invalidating `vtime`.
476 	 */
477 	atomic64_t			active_period;
478 	struct list_head		active_list;
479 
480 	/* see __propagate_active_weight() and current_hweight() for details */
481 	u64				child_active_sum;
482 	u64				child_inuse_sum;
483 	int				hweight_gen;
484 	u32				hweight_active;
485 	u32				hweight_inuse;
486 	bool				has_surplus;
487 
488 	struct wait_queue_head		waitq;
489 	struct hrtimer			waitq_timer;
490 	struct hrtimer			delay_timer;
491 
492 	/* usage is recorded as fractions of HWEIGHT_WHOLE */
493 	int				usage_idx;
494 	u32				usages[NR_USAGE_SLOTS];
495 
496 	/* this iocg's depth in the hierarchy and ancestors including self */
497 	int				level;
498 	struct ioc_gq			*ancestors[];
499 };
500 
501 /* per cgroup */
502 struct ioc_cgrp {
503 	struct blkcg_policy_data	cpd;
504 	unsigned int			dfl_weight;
505 };
506 
507 struct ioc_now {
508 	u64				now_ns;
509 	u32				now;
510 	u64				vnow;
511 	u64				vrate;
512 };
513 
514 struct iocg_wait {
515 	struct wait_queue_entry		wait;
516 	struct bio			*bio;
517 	u64				abs_cost;
518 	bool				committed;
519 };
520 
521 struct iocg_wake_ctx {
522 	struct ioc_gq			*iocg;
523 	u32				hw_inuse;
524 	s64				vbudget;
525 };
526 
527 static const struct ioc_params autop[] = {
528 	[AUTOP_HDD] = {
529 		.qos				= {
530 			[QOS_RLAT]		=        250000, /* 250ms */
531 			[QOS_WLAT]		=        250000,
532 			[QOS_MIN]		= VRATE_MIN_PPM,
533 			[QOS_MAX]		= VRATE_MAX_PPM,
534 		},
535 		.i_lcoefs			= {
536 			[I_LCOEF_RBPS]		=     174019176,
537 			[I_LCOEF_RSEQIOPS]	=         41708,
538 			[I_LCOEF_RRANDIOPS]	=           370,
539 			[I_LCOEF_WBPS]		=     178075866,
540 			[I_LCOEF_WSEQIOPS]	=         42705,
541 			[I_LCOEF_WRANDIOPS]	=           378,
542 		},
543 	},
544 	[AUTOP_SSD_QD1] = {
545 		.qos				= {
546 			[QOS_RLAT]		=         25000, /* 25ms */
547 			[QOS_WLAT]		=         25000,
548 			[QOS_MIN]		= VRATE_MIN_PPM,
549 			[QOS_MAX]		= VRATE_MAX_PPM,
550 		},
551 		.i_lcoefs			= {
552 			[I_LCOEF_RBPS]		=     245855193,
553 			[I_LCOEF_RSEQIOPS]	=         61575,
554 			[I_LCOEF_RRANDIOPS]	=          6946,
555 			[I_LCOEF_WBPS]		=     141365009,
556 			[I_LCOEF_WSEQIOPS]	=         33716,
557 			[I_LCOEF_WRANDIOPS]	=         26796,
558 		},
559 	},
560 	[AUTOP_SSD_DFL] = {
561 		.qos				= {
562 			[QOS_RLAT]		=         25000, /* 25ms */
563 			[QOS_WLAT]		=         25000,
564 			[QOS_MIN]		= VRATE_MIN_PPM,
565 			[QOS_MAX]		= VRATE_MAX_PPM,
566 		},
567 		.i_lcoefs			= {
568 			[I_LCOEF_RBPS]		=     488636629,
569 			[I_LCOEF_RSEQIOPS]	=          8932,
570 			[I_LCOEF_RRANDIOPS]	=          8518,
571 			[I_LCOEF_WBPS]		=     427891549,
572 			[I_LCOEF_WSEQIOPS]	=         28755,
573 			[I_LCOEF_WRANDIOPS]	=         21940,
574 		},
575 		.too_fast_vrate_pct		=           500,
576 	},
577 	[AUTOP_SSD_FAST] = {
578 		.qos				= {
579 			[QOS_RLAT]		=          5000, /* 5ms */
580 			[QOS_WLAT]		=          5000,
581 			[QOS_MIN]		= VRATE_MIN_PPM,
582 			[QOS_MAX]		= VRATE_MAX_PPM,
583 		},
584 		.i_lcoefs			= {
585 			[I_LCOEF_RBPS]		=    3102524156LLU,
586 			[I_LCOEF_RSEQIOPS]	=        724816,
587 			[I_LCOEF_RRANDIOPS]	=        778122,
588 			[I_LCOEF_WBPS]		=    1742780862LLU,
589 			[I_LCOEF_WSEQIOPS]	=        425702,
590 			[I_LCOEF_WRANDIOPS]	=	 443193,
591 		},
592 		.too_slow_vrate_pct		=            10,
593 	},
594 };
595 
596 /*
597  * vrate adjust percentages indexed by ioc->busy_level.  We adjust up on
598  * vtime credit shortage and down on device saturation.
599  */
600 static u32 vrate_adj_pct[] =
601 	{ 0, 0, 0, 0,
602 	  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
603 	  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
604 	  4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 16 };
605 
606 static struct blkcg_policy blkcg_policy_iocost;
607 
608 /* accessors and helpers */
609 static struct ioc *rqos_to_ioc(struct rq_qos *rqos)
610 {
611 	return container_of(rqos, struct ioc, rqos);
612 }
613 
614 static struct ioc *q_to_ioc(struct request_queue *q)
615 {
616 	return rqos_to_ioc(rq_qos_id(q, RQ_QOS_COST));
617 }
618 
619 static const char *q_name(struct request_queue *q)
620 {
621 	if (test_bit(QUEUE_FLAG_REGISTERED, &q->queue_flags))
622 		return kobject_name(q->kobj.parent);
623 	else
624 		return "<unknown>";
625 }
626 
627 static const char __maybe_unused *ioc_name(struct ioc *ioc)
628 {
629 	return q_name(ioc->rqos.q);
630 }
631 
632 static struct ioc_gq *pd_to_iocg(struct blkg_policy_data *pd)
633 {
634 	return pd ? container_of(pd, struct ioc_gq, pd) : NULL;
635 }
636 
637 static struct ioc_gq *blkg_to_iocg(struct blkcg_gq *blkg)
638 {
639 	return pd_to_iocg(blkg_to_pd(blkg, &blkcg_policy_iocost));
640 }
641 
642 static struct blkcg_gq *iocg_to_blkg(struct ioc_gq *iocg)
643 {
644 	return pd_to_blkg(&iocg->pd);
645 }
646 
647 static struct ioc_cgrp *blkcg_to_iocc(struct blkcg *blkcg)
648 {
649 	return container_of(blkcg_to_cpd(blkcg, &blkcg_policy_iocost),
650 			    struct ioc_cgrp, cpd);
651 }
652 
653 /*
654  * Scale @abs_cost to the inverse of @hw_inuse.  The lower the hierarchical
655  * weight, the more expensive each IO.  Must round up.
656  */
657 static u64 abs_cost_to_cost(u64 abs_cost, u32 hw_inuse)
658 {
659 	return DIV64_U64_ROUND_UP(abs_cost * HWEIGHT_WHOLE, hw_inuse);
660 }
661 
662 /*
663  * The inverse of abs_cost_to_cost().  Must round up.
664  */
665 static u64 cost_to_abs_cost(u64 cost, u32 hw_inuse)
666 {
667 	return DIV64_U64_ROUND_UP(cost * hw_inuse, HWEIGHT_WHOLE);
668 }
669 
670 static void iocg_commit_bio(struct ioc_gq *iocg, struct bio *bio, u64 cost)
671 {
672 	bio->bi_iocost_cost = cost;
673 	atomic64_add(cost, &iocg->vtime);
674 }
675 
676 #define CREATE_TRACE_POINTS
677 #include <trace/events/iocost.h>
678 
679 /* latency Qos params changed, update period_us and all the dependent params */
680 static void ioc_refresh_period_us(struct ioc *ioc)
681 {
682 	u32 ppm, lat, multi, period_us;
683 
684 	lockdep_assert_held(&ioc->lock);
685 
686 	/* pick the higher latency target */
687 	if (ioc->params.qos[QOS_RLAT] >= ioc->params.qos[QOS_WLAT]) {
688 		ppm = ioc->params.qos[QOS_RPPM];
689 		lat = ioc->params.qos[QOS_RLAT];
690 	} else {
691 		ppm = ioc->params.qos[QOS_WPPM];
692 		lat = ioc->params.qos[QOS_WLAT];
693 	}
694 
695 	/*
696 	 * We want the period to be long enough to contain a healthy number
697 	 * of IOs while short enough for granular control.  Define it as a
698 	 * multiple of the latency target.  Ideally, the multiplier should
699 	 * be scaled according to the percentile so that it would nominally
700 	 * contain a certain number of requests.  Let's be simpler and
701 	 * scale it linearly so that it's 2x >= pct(90) and 10x at pct(50).
702 	 */
703 	if (ppm)
704 		multi = max_t(u32, (MILLION - ppm) / 50000, 2);
705 	else
706 		multi = 2;
707 	period_us = multi * lat;
708 	period_us = clamp_t(u32, period_us, MIN_PERIOD, MAX_PERIOD);
709 
710 	/* calculate dependent params */
711 	ioc->period_us = period_us;
712 	ioc->margin_us = period_us * MARGIN_PCT / 100;
713 	ioc->inuse_margin_vtime = DIV64_U64_ROUND_UP(
714 			period_us * VTIME_PER_USEC * INUSE_MARGIN_PCT, 100);
715 }
716 
717 static int ioc_autop_idx(struct ioc *ioc)
718 {
719 	int idx = ioc->autop_idx;
720 	const struct ioc_params *p = &autop[idx];
721 	u32 vrate_pct;
722 	u64 now_ns;
723 
724 	/* rotational? */
725 	if (!blk_queue_nonrot(ioc->rqos.q))
726 		return AUTOP_HDD;
727 
728 	/* handle SATA SSDs w/ broken NCQ */
729 	if (blk_queue_depth(ioc->rqos.q) == 1)
730 		return AUTOP_SSD_QD1;
731 
732 	/* use one of the normal ssd sets */
733 	if (idx < AUTOP_SSD_DFL)
734 		return AUTOP_SSD_DFL;
735 
736 	/* if user is overriding anything, maintain what was there */
737 	if (ioc->user_qos_params || ioc->user_cost_model)
738 		return idx;
739 
740 	/* step up/down based on the vrate */
741 	vrate_pct = div64_u64(atomic64_read(&ioc->vtime_rate) * 100,
742 			      VTIME_PER_USEC);
743 	now_ns = ktime_get_ns();
744 
745 	if (p->too_fast_vrate_pct && p->too_fast_vrate_pct <= vrate_pct) {
746 		if (!ioc->autop_too_fast_at)
747 			ioc->autop_too_fast_at = now_ns;
748 		if (now_ns - ioc->autop_too_fast_at >= AUTOP_CYCLE_NSEC)
749 			return idx + 1;
750 	} else {
751 		ioc->autop_too_fast_at = 0;
752 	}
753 
754 	if (p->too_slow_vrate_pct && p->too_slow_vrate_pct >= vrate_pct) {
755 		if (!ioc->autop_too_slow_at)
756 			ioc->autop_too_slow_at = now_ns;
757 		if (now_ns - ioc->autop_too_slow_at >= AUTOP_CYCLE_NSEC)
758 			return idx - 1;
759 	} else {
760 		ioc->autop_too_slow_at = 0;
761 	}
762 
763 	return idx;
764 }
765 
766 /*
767  * Take the followings as input
768  *
769  *  @bps	maximum sequential throughput
770  *  @seqiops	maximum sequential 4k iops
771  *  @randiops	maximum random 4k iops
772  *
773  * and calculate the linear model cost coefficients.
774  *
775  *  *@page	per-page cost		1s / (@bps / 4096)
776  *  *@seqio	base cost of a seq IO	max((1s / @seqiops) - *@page, 0)
777  *  @randiops	base cost of a rand IO	max((1s / @randiops) - *@page, 0)
778  */
779 static void calc_lcoefs(u64 bps, u64 seqiops, u64 randiops,
780 			u64 *page, u64 *seqio, u64 *randio)
781 {
782 	u64 v;
783 
784 	*page = *seqio = *randio = 0;
785 
786 	if (bps)
787 		*page = DIV64_U64_ROUND_UP(VTIME_PER_SEC,
788 					   DIV_ROUND_UP_ULL(bps, IOC_PAGE_SIZE));
789 
790 	if (seqiops) {
791 		v = DIV64_U64_ROUND_UP(VTIME_PER_SEC, seqiops);
792 		if (v > *page)
793 			*seqio = v - *page;
794 	}
795 
796 	if (randiops) {
797 		v = DIV64_U64_ROUND_UP(VTIME_PER_SEC, randiops);
798 		if (v > *page)
799 			*randio = v - *page;
800 	}
801 }
802 
803 static void ioc_refresh_lcoefs(struct ioc *ioc)
804 {
805 	u64 *u = ioc->params.i_lcoefs;
806 	u64 *c = ioc->params.lcoefs;
807 
808 	calc_lcoefs(u[I_LCOEF_RBPS], u[I_LCOEF_RSEQIOPS], u[I_LCOEF_RRANDIOPS],
809 		    &c[LCOEF_RPAGE], &c[LCOEF_RSEQIO], &c[LCOEF_RRANDIO]);
810 	calc_lcoefs(u[I_LCOEF_WBPS], u[I_LCOEF_WSEQIOPS], u[I_LCOEF_WRANDIOPS],
811 		    &c[LCOEF_WPAGE], &c[LCOEF_WSEQIO], &c[LCOEF_WRANDIO]);
812 }
813 
814 static bool ioc_refresh_params(struct ioc *ioc, bool force)
815 {
816 	const struct ioc_params *p;
817 	int idx;
818 
819 	lockdep_assert_held(&ioc->lock);
820 
821 	idx = ioc_autop_idx(ioc);
822 	p = &autop[idx];
823 
824 	if (idx == ioc->autop_idx && !force)
825 		return false;
826 
827 	if (idx != ioc->autop_idx)
828 		atomic64_set(&ioc->vtime_rate, VTIME_PER_USEC);
829 
830 	ioc->autop_idx = idx;
831 	ioc->autop_too_fast_at = 0;
832 	ioc->autop_too_slow_at = 0;
833 
834 	if (!ioc->user_qos_params)
835 		memcpy(ioc->params.qos, p->qos, sizeof(p->qos));
836 	if (!ioc->user_cost_model)
837 		memcpy(ioc->params.i_lcoefs, p->i_lcoefs, sizeof(p->i_lcoefs));
838 
839 	ioc_refresh_period_us(ioc);
840 	ioc_refresh_lcoefs(ioc);
841 
842 	ioc->vrate_min = DIV64_U64_ROUND_UP((u64)ioc->params.qos[QOS_MIN] *
843 					    VTIME_PER_USEC, MILLION);
844 	ioc->vrate_max = div64_u64((u64)ioc->params.qos[QOS_MAX] *
845 				   VTIME_PER_USEC, MILLION);
846 
847 	return true;
848 }
849 
850 /* take a snapshot of the current [v]time and vrate */
851 static void ioc_now(struct ioc *ioc, struct ioc_now *now)
852 {
853 	unsigned seq;
854 
855 	now->now_ns = ktime_get();
856 	now->now = ktime_to_us(now->now_ns);
857 	now->vrate = atomic64_read(&ioc->vtime_rate);
858 
859 	/*
860 	 * The current vtime is
861 	 *
862 	 *   vtime at period start + (wallclock time since the start) * vrate
863 	 *
864 	 * As a consistent snapshot of `period_at_vtime` and `period_at` is
865 	 * needed, they're seqcount protected.
866 	 */
867 	do {
868 		seq = read_seqcount_begin(&ioc->period_seqcount);
869 		now->vnow = ioc->period_at_vtime +
870 			(now->now - ioc->period_at) * now->vrate;
871 	} while (read_seqcount_retry(&ioc->period_seqcount, seq));
872 }
873 
874 static void ioc_start_period(struct ioc *ioc, struct ioc_now *now)
875 {
876 	lockdep_assert_held(&ioc->lock);
877 	WARN_ON_ONCE(ioc->running != IOC_RUNNING);
878 
879 	write_seqcount_begin(&ioc->period_seqcount);
880 	ioc->period_at = now->now;
881 	ioc->period_at_vtime = now->vnow;
882 	write_seqcount_end(&ioc->period_seqcount);
883 
884 	ioc->timer.expires = jiffies + usecs_to_jiffies(ioc->period_us);
885 	add_timer(&ioc->timer);
886 }
887 
888 /*
889  * Update @iocg's `active` and `inuse` to @active and @inuse, update level
890  * weight sums and propagate upwards accordingly.
891  */
892 static void __propagate_active_weight(struct ioc_gq *iocg, u32 active, u32 inuse)
893 {
894 	struct ioc *ioc = iocg->ioc;
895 	int lvl;
896 
897 	lockdep_assert_held(&ioc->lock);
898 
899 	inuse = min(active, inuse);
900 
901 	for (lvl = iocg->level - 1; lvl >= 0; lvl--) {
902 		struct ioc_gq *parent = iocg->ancestors[lvl];
903 		struct ioc_gq *child = iocg->ancestors[lvl + 1];
904 		u32 parent_active = 0, parent_inuse = 0;
905 
906 		/* update the level sums */
907 		parent->child_active_sum += (s32)(active - child->active);
908 		parent->child_inuse_sum += (s32)(inuse - child->inuse);
909 		/* apply the udpates */
910 		child->active = active;
911 		child->inuse = inuse;
912 
913 		/*
914 		 * The delta between inuse and active sums indicates that
915 		 * that much of weight is being given away.  Parent's inuse
916 		 * and active should reflect the ratio.
917 		 */
918 		if (parent->child_active_sum) {
919 			parent_active = parent->weight;
920 			parent_inuse = DIV64_U64_ROUND_UP(
921 				parent_active * parent->child_inuse_sum,
922 				parent->child_active_sum);
923 		}
924 
925 		/* do we need to keep walking up? */
926 		if (parent_active == parent->active &&
927 		    parent_inuse == parent->inuse)
928 			break;
929 
930 		active = parent_active;
931 		inuse = parent_inuse;
932 	}
933 
934 	ioc->weights_updated = true;
935 }
936 
937 static void commit_active_weights(struct ioc *ioc)
938 {
939 	lockdep_assert_held(&ioc->lock);
940 
941 	if (ioc->weights_updated) {
942 		/* paired with rmb in current_hweight(), see there */
943 		smp_wmb();
944 		atomic_inc(&ioc->hweight_gen);
945 		ioc->weights_updated = false;
946 	}
947 }
948 
949 static void propagate_active_weight(struct ioc_gq *iocg, u32 active, u32 inuse)
950 {
951 	__propagate_active_weight(iocg, active, inuse);
952 	commit_active_weights(iocg->ioc);
953 }
954 
955 static void current_hweight(struct ioc_gq *iocg, u32 *hw_activep, u32 *hw_inusep)
956 {
957 	struct ioc *ioc = iocg->ioc;
958 	int lvl;
959 	u32 hwa, hwi;
960 	int ioc_gen;
961 
962 	/* hot path - if uptodate, use cached */
963 	ioc_gen = atomic_read(&ioc->hweight_gen);
964 	if (ioc_gen == iocg->hweight_gen)
965 		goto out;
966 
967 	/*
968 	 * Paired with wmb in commit_active_weights().  If we saw the
969 	 * updated hweight_gen, all the weight updates from
970 	 * __propagate_active_weight() are visible too.
971 	 *
972 	 * We can race with weight updates during calculation and get it
973 	 * wrong.  However, hweight_gen would have changed and a future
974 	 * reader will recalculate and we're guaranteed to discard the
975 	 * wrong result soon.
976 	 */
977 	smp_rmb();
978 
979 	hwa = hwi = HWEIGHT_WHOLE;
980 	for (lvl = 0; lvl <= iocg->level - 1; lvl++) {
981 		struct ioc_gq *parent = iocg->ancestors[lvl];
982 		struct ioc_gq *child = iocg->ancestors[lvl + 1];
983 		u32 active_sum = READ_ONCE(parent->child_active_sum);
984 		u32 inuse_sum = READ_ONCE(parent->child_inuse_sum);
985 		u32 active = READ_ONCE(child->active);
986 		u32 inuse = READ_ONCE(child->inuse);
987 
988 		/* we can race with deactivations and either may read as zero */
989 		if (!active_sum || !inuse_sum)
990 			continue;
991 
992 		active_sum = max(active, active_sum);
993 		hwa = hwa * active / active_sum;	/* max 16bits * 10000 */
994 
995 		inuse_sum = max(inuse, inuse_sum);
996 		hwi = hwi * inuse / inuse_sum;		/* max 16bits * 10000 */
997 	}
998 
999 	iocg->hweight_active = max_t(u32, hwa, 1);
1000 	iocg->hweight_inuse = max_t(u32, hwi, 1);
1001 	iocg->hweight_gen = ioc_gen;
1002 out:
1003 	if (hw_activep)
1004 		*hw_activep = iocg->hweight_active;
1005 	if (hw_inusep)
1006 		*hw_inusep = iocg->hweight_inuse;
1007 }
1008 
1009 static void weight_updated(struct ioc_gq *iocg)
1010 {
1011 	struct ioc *ioc = iocg->ioc;
1012 	struct blkcg_gq *blkg = iocg_to_blkg(iocg);
1013 	struct ioc_cgrp *iocc = blkcg_to_iocc(blkg->blkcg);
1014 	u32 weight;
1015 
1016 	lockdep_assert_held(&ioc->lock);
1017 
1018 	weight = iocg->cfg_weight ?: iocc->dfl_weight;
1019 	if (weight != iocg->weight && iocg->active)
1020 		propagate_active_weight(iocg, weight,
1021 			DIV64_U64_ROUND_UP(iocg->inuse * weight, iocg->weight));
1022 	iocg->weight = weight;
1023 }
1024 
1025 static bool iocg_activate(struct ioc_gq *iocg, struct ioc_now *now)
1026 {
1027 	struct ioc *ioc = iocg->ioc;
1028 	u64 last_period, cur_period, max_period_delta;
1029 	u64 vtime, vmargin, vmin;
1030 	int i;
1031 
1032 	/*
1033 	 * If seem to be already active, just update the stamp to tell the
1034 	 * timer that we're still active.  We don't mind occassional races.
1035 	 */
1036 	if (!list_empty(&iocg->active_list)) {
1037 		ioc_now(ioc, now);
1038 		cur_period = atomic64_read(&ioc->cur_period);
1039 		if (atomic64_read(&iocg->active_period) != cur_period)
1040 			atomic64_set(&iocg->active_period, cur_period);
1041 		return true;
1042 	}
1043 
1044 	/* racy check on internal node IOs, treat as root level IOs */
1045 	if (iocg->child_active_sum)
1046 		return false;
1047 
1048 	spin_lock_irq(&ioc->lock);
1049 
1050 	ioc_now(ioc, now);
1051 
1052 	/* update period */
1053 	cur_period = atomic64_read(&ioc->cur_period);
1054 	last_period = atomic64_read(&iocg->active_period);
1055 	atomic64_set(&iocg->active_period, cur_period);
1056 
1057 	/* already activated or breaking leaf-only constraint? */
1058 	if (!list_empty(&iocg->active_list))
1059 		goto succeed_unlock;
1060 	for (i = iocg->level - 1; i > 0; i--)
1061 		if (!list_empty(&iocg->ancestors[i]->active_list))
1062 			goto fail_unlock;
1063 
1064 	if (iocg->child_active_sum)
1065 		goto fail_unlock;
1066 
1067 	/*
1068 	 * vtime may wrap when vrate is raised substantially due to
1069 	 * underestimated IO costs.  Look at the period and ignore its
1070 	 * vtime if the iocg has been idle for too long.  Also, cap the
1071 	 * budget it can start with to the margin.
1072 	 */
1073 	max_period_delta = DIV64_U64_ROUND_UP(VTIME_VALID_DUR, ioc->period_us);
1074 	vtime = atomic64_read(&iocg->vtime);
1075 	vmargin = ioc->margin_us * now->vrate;
1076 	vmin = now->vnow - vmargin;
1077 
1078 	if (last_period + max_period_delta < cur_period ||
1079 	    time_before64(vtime, vmin)) {
1080 		atomic64_add(vmin - vtime, &iocg->vtime);
1081 		atomic64_add(vmin - vtime, &iocg->done_vtime);
1082 		vtime = vmin;
1083 	}
1084 
1085 	/*
1086 	 * Activate, propagate weight and start period timer if not
1087 	 * running.  Reset hweight_gen to avoid accidental match from
1088 	 * wrapping.
1089 	 */
1090 	iocg->hweight_gen = atomic_read(&ioc->hweight_gen) - 1;
1091 	list_add(&iocg->active_list, &ioc->active_iocgs);
1092 	propagate_active_weight(iocg, iocg->weight,
1093 				iocg->last_inuse ?: iocg->weight);
1094 
1095 	TRACE_IOCG_PATH(iocg_activate, iocg, now,
1096 			last_period, cur_period, vtime);
1097 
1098 	iocg->last_vtime = vtime;
1099 
1100 	if (ioc->running == IOC_IDLE) {
1101 		ioc->running = IOC_RUNNING;
1102 		ioc_start_period(ioc, now);
1103 	}
1104 
1105 succeed_unlock:
1106 	spin_unlock_irq(&ioc->lock);
1107 	return true;
1108 
1109 fail_unlock:
1110 	spin_unlock_irq(&ioc->lock);
1111 	return false;
1112 }
1113 
1114 static int iocg_wake_fn(struct wait_queue_entry *wq_entry, unsigned mode,
1115 			int flags, void *key)
1116 {
1117 	struct iocg_wait *wait = container_of(wq_entry, struct iocg_wait, wait);
1118 	struct iocg_wake_ctx *ctx = (struct iocg_wake_ctx *)key;
1119 	u64 cost = abs_cost_to_cost(wait->abs_cost, ctx->hw_inuse);
1120 
1121 	ctx->vbudget -= cost;
1122 
1123 	if (ctx->vbudget < 0)
1124 		return -1;
1125 
1126 	iocg_commit_bio(ctx->iocg, wait->bio, cost);
1127 
1128 	/*
1129 	 * autoremove_wake_function() removes the wait entry only when it
1130 	 * actually changed the task state.  We want the wait always
1131 	 * removed.  Remove explicitly and use default_wake_function().
1132 	 */
1133 	list_del_init(&wq_entry->entry);
1134 	wait->committed = true;
1135 
1136 	default_wake_function(wq_entry, mode, flags, key);
1137 	return 0;
1138 }
1139 
1140 static void iocg_kick_waitq(struct ioc_gq *iocg, struct ioc_now *now)
1141 {
1142 	struct ioc *ioc = iocg->ioc;
1143 	struct iocg_wake_ctx ctx = { .iocg = iocg };
1144 	u64 margin_ns = (u64)(ioc->period_us *
1145 			      WAITQ_TIMER_MARGIN_PCT / 100) * NSEC_PER_USEC;
1146 	u64 vdebt, vshortage, expires, oexpires;
1147 	s64 vbudget;
1148 	u32 hw_inuse;
1149 
1150 	lockdep_assert_held(&iocg->waitq.lock);
1151 
1152 	current_hweight(iocg, NULL, &hw_inuse);
1153 	vbudget = now->vnow - atomic64_read(&iocg->vtime);
1154 
1155 	/* pay off debt */
1156 	vdebt = abs_cost_to_cost(iocg->abs_vdebt, hw_inuse);
1157 	if (vdebt && vbudget > 0) {
1158 		u64 delta = min_t(u64, vbudget, vdebt);
1159 		u64 abs_delta = min(cost_to_abs_cost(delta, hw_inuse),
1160 				    iocg->abs_vdebt);
1161 
1162 		atomic64_add(delta, &iocg->vtime);
1163 		atomic64_add(delta, &iocg->done_vtime);
1164 		iocg->abs_vdebt -= abs_delta;
1165 	}
1166 
1167 	/*
1168 	 * Wake up the ones which are due and see how much vtime we'll need
1169 	 * for the next one.
1170 	 */
1171 	ctx.hw_inuse = hw_inuse;
1172 	ctx.vbudget = vbudget - vdebt;
1173 	__wake_up_locked_key(&iocg->waitq, TASK_NORMAL, &ctx);
1174 	if (!waitqueue_active(&iocg->waitq))
1175 		return;
1176 	if (WARN_ON_ONCE(ctx.vbudget >= 0))
1177 		return;
1178 
1179 	/* determine next wakeup, add a quarter margin to guarantee chunking */
1180 	vshortage = -ctx.vbudget;
1181 	expires = now->now_ns +
1182 		DIV64_U64_ROUND_UP(vshortage, now->vrate) * NSEC_PER_USEC;
1183 	expires += margin_ns / 4;
1184 
1185 	/* if already active and close enough, don't bother */
1186 	oexpires = ktime_to_ns(hrtimer_get_softexpires(&iocg->waitq_timer));
1187 	if (hrtimer_is_queued(&iocg->waitq_timer) &&
1188 	    abs(oexpires - expires) <= margin_ns / 4)
1189 		return;
1190 
1191 	hrtimer_start_range_ns(&iocg->waitq_timer, ns_to_ktime(expires),
1192 			       margin_ns / 4, HRTIMER_MODE_ABS);
1193 }
1194 
1195 static enum hrtimer_restart iocg_waitq_timer_fn(struct hrtimer *timer)
1196 {
1197 	struct ioc_gq *iocg = container_of(timer, struct ioc_gq, waitq_timer);
1198 	struct ioc_now now;
1199 	unsigned long flags;
1200 
1201 	ioc_now(iocg->ioc, &now);
1202 
1203 	spin_lock_irqsave(&iocg->waitq.lock, flags);
1204 	iocg_kick_waitq(iocg, &now);
1205 	spin_unlock_irqrestore(&iocg->waitq.lock, flags);
1206 
1207 	return HRTIMER_NORESTART;
1208 }
1209 
1210 static bool iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now)
1211 {
1212 	struct ioc *ioc = iocg->ioc;
1213 	struct blkcg_gq *blkg = iocg_to_blkg(iocg);
1214 	u64 vtime = atomic64_read(&iocg->vtime);
1215 	u64 vmargin = ioc->margin_us * now->vrate;
1216 	u64 margin_ns = ioc->margin_us * NSEC_PER_USEC;
1217 	u64 delta_ns, expires, oexpires;
1218 	u32 hw_inuse;
1219 
1220 	lockdep_assert_held(&iocg->waitq.lock);
1221 
1222 	/* debt-adjust vtime */
1223 	current_hweight(iocg, NULL, &hw_inuse);
1224 	vtime += abs_cost_to_cost(iocg->abs_vdebt, hw_inuse);
1225 
1226 	/*
1227 	 * Clear or maintain depending on the overage. Non-zero vdebt is what
1228 	 * guarantees that @iocg is online and future iocg_kick_delay() will
1229 	 * clear use_delay. Don't leave it on when there's no vdebt.
1230 	 */
1231 	if (!iocg->abs_vdebt || time_before_eq64(vtime, now->vnow)) {
1232 		blkcg_clear_delay(blkg);
1233 		return false;
1234 	}
1235 	if (!atomic_read(&blkg->use_delay) &&
1236 	    time_before_eq64(vtime, now->vnow + vmargin))
1237 		return false;
1238 
1239 	/* use delay */
1240 	delta_ns = DIV64_U64_ROUND_UP(vtime - now->vnow,
1241 				      now->vrate) * NSEC_PER_USEC;
1242 	blkcg_set_delay(blkg, delta_ns);
1243 	expires = now->now_ns + delta_ns;
1244 
1245 	/* if already active and close enough, don't bother */
1246 	oexpires = ktime_to_ns(hrtimer_get_softexpires(&iocg->delay_timer));
1247 	if (hrtimer_is_queued(&iocg->delay_timer) &&
1248 	    abs(oexpires - expires) <= margin_ns / 4)
1249 		return true;
1250 
1251 	hrtimer_start_range_ns(&iocg->delay_timer, ns_to_ktime(expires),
1252 			       margin_ns / 4, HRTIMER_MODE_ABS);
1253 	return true;
1254 }
1255 
1256 static enum hrtimer_restart iocg_delay_timer_fn(struct hrtimer *timer)
1257 {
1258 	struct ioc_gq *iocg = container_of(timer, struct ioc_gq, delay_timer);
1259 	struct ioc_now now;
1260 	unsigned long flags;
1261 
1262 	spin_lock_irqsave(&iocg->waitq.lock, flags);
1263 	ioc_now(iocg->ioc, &now);
1264 	iocg_kick_delay(iocg, &now);
1265 	spin_unlock_irqrestore(&iocg->waitq.lock, flags);
1266 
1267 	return HRTIMER_NORESTART;
1268 }
1269 
1270 static void ioc_lat_stat(struct ioc *ioc, u32 *missed_ppm_ar, u32 *rq_wait_pct_p)
1271 {
1272 	u32 nr_met[2] = { };
1273 	u32 nr_missed[2] = { };
1274 	u64 rq_wait_ns = 0;
1275 	int cpu, rw;
1276 
1277 	for_each_online_cpu(cpu) {
1278 		struct ioc_pcpu_stat *stat = per_cpu_ptr(ioc->pcpu_stat, cpu);
1279 		u64 this_rq_wait_ns;
1280 
1281 		for (rw = READ; rw <= WRITE; rw++) {
1282 			u32 this_met = READ_ONCE(stat->missed[rw].nr_met);
1283 			u32 this_missed = READ_ONCE(stat->missed[rw].nr_missed);
1284 
1285 			nr_met[rw] += this_met - stat->missed[rw].last_met;
1286 			nr_missed[rw] += this_missed - stat->missed[rw].last_missed;
1287 			stat->missed[rw].last_met = this_met;
1288 			stat->missed[rw].last_missed = this_missed;
1289 		}
1290 
1291 		this_rq_wait_ns = READ_ONCE(stat->rq_wait_ns);
1292 		rq_wait_ns += this_rq_wait_ns - stat->last_rq_wait_ns;
1293 		stat->last_rq_wait_ns = this_rq_wait_ns;
1294 	}
1295 
1296 	for (rw = READ; rw <= WRITE; rw++) {
1297 		if (nr_met[rw] + nr_missed[rw])
1298 			missed_ppm_ar[rw] =
1299 				DIV64_U64_ROUND_UP((u64)nr_missed[rw] * MILLION,
1300 						   nr_met[rw] + nr_missed[rw]);
1301 		else
1302 			missed_ppm_ar[rw] = 0;
1303 	}
1304 
1305 	*rq_wait_pct_p = div64_u64(rq_wait_ns * 100,
1306 				   ioc->period_us * NSEC_PER_USEC);
1307 }
1308 
1309 /* was iocg idle this period? */
1310 static bool iocg_is_idle(struct ioc_gq *iocg)
1311 {
1312 	struct ioc *ioc = iocg->ioc;
1313 
1314 	/* did something get issued this period? */
1315 	if (atomic64_read(&iocg->active_period) ==
1316 	    atomic64_read(&ioc->cur_period))
1317 		return false;
1318 
1319 	/* is something in flight? */
1320 	if (atomic64_read(&iocg->done_vtime) != atomic64_read(&iocg->vtime))
1321 		return false;
1322 
1323 	return true;
1324 }
1325 
1326 /* returns usage with margin added if surplus is large enough */
1327 static u32 surplus_adjusted_hweight_inuse(u32 usage, u32 hw_inuse)
1328 {
1329 	/* add margin */
1330 	usage = DIV_ROUND_UP(usage * SURPLUS_SCALE_PCT, 100);
1331 	usage += SURPLUS_SCALE_ABS;
1332 
1333 	/* don't bother if the surplus is too small */
1334 	if (usage + SURPLUS_MIN_ADJ_DELTA > hw_inuse)
1335 		return 0;
1336 
1337 	return usage;
1338 }
1339 
1340 static void ioc_timer_fn(struct timer_list *timer)
1341 {
1342 	struct ioc *ioc = container_of(timer, struct ioc, timer);
1343 	struct ioc_gq *iocg, *tiocg;
1344 	struct ioc_now now;
1345 	int nr_surpluses = 0, nr_shortages = 0, nr_lagging = 0;
1346 	u32 ppm_rthr = MILLION - ioc->params.qos[QOS_RPPM];
1347 	u32 ppm_wthr = MILLION - ioc->params.qos[QOS_WPPM];
1348 	u32 missed_ppm[2], rq_wait_pct;
1349 	u64 period_vtime;
1350 	int prev_busy_level, i;
1351 
1352 	/* how were the latencies during the period? */
1353 	ioc_lat_stat(ioc, missed_ppm, &rq_wait_pct);
1354 
1355 	/* take care of active iocgs */
1356 	spin_lock_irq(&ioc->lock);
1357 
1358 	ioc_now(ioc, &now);
1359 
1360 	period_vtime = now.vnow - ioc->period_at_vtime;
1361 	if (WARN_ON_ONCE(!period_vtime)) {
1362 		spin_unlock_irq(&ioc->lock);
1363 		return;
1364 	}
1365 
1366 	/*
1367 	 * Waiters determine the sleep durations based on the vrate they
1368 	 * saw at the time of sleep.  If vrate has increased, some waiters
1369 	 * could be sleeping for too long.  Wake up tardy waiters which
1370 	 * should have woken up in the last period and expire idle iocgs.
1371 	 */
1372 	list_for_each_entry_safe(iocg, tiocg, &ioc->active_iocgs, active_list) {
1373 		if (!waitqueue_active(&iocg->waitq) && iocg->abs_vdebt &&
1374 		    !iocg_is_idle(iocg))
1375 			continue;
1376 
1377 		spin_lock(&iocg->waitq.lock);
1378 
1379 		if (waitqueue_active(&iocg->waitq) || iocg->abs_vdebt) {
1380 			/* might be oversleeping vtime / hweight changes, kick */
1381 			iocg_kick_waitq(iocg, &now);
1382 			iocg_kick_delay(iocg, &now);
1383 		} else if (iocg_is_idle(iocg)) {
1384 			/* no waiter and idle, deactivate */
1385 			iocg->last_inuse = iocg->inuse;
1386 			__propagate_active_weight(iocg, 0, 0);
1387 			list_del_init(&iocg->active_list);
1388 		}
1389 
1390 		spin_unlock(&iocg->waitq.lock);
1391 	}
1392 	commit_active_weights(ioc);
1393 
1394 	/* calc usages and see whether some weights need to be moved around */
1395 	list_for_each_entry(iocg, &ioc->active_iocgs, active_list) {
1396 		u64 vdone, vtime, vusage, vmargin, vmin;
1397 		u32 hw_active, hw_inuse, usage;
1398 
1399 		/*
1400 		 * Collect unused and wind vtime closer to vnow to prevent
1401 		 * iocgs from accumulating a large amount of budget.
1402 		 */
1403 		vdone = atomic64_read(&iocg->done_vtime);
1404 		vtime = atomic64_read(&iocg->vtime);
1405 		current_hweight(iocg, &hw_active, &hw_inuse);
1406 
1407 		/*
1408 		 * Latency QoS detection doesn't account for IOs which are
1409 		 * in-flight for longer than a period.  Detect them by
1410 		 * comparing vdone against period start.  If lagging behind
1411 		 * IOs from past periods, don't increase vrate.
1412 		 */
1413 		if ((ppm_rthr != MILLION || ppm_wthr != MILLION) &&
1414 		    !atomic_read(&iocg_to_blkg(iocg)->use_delay) &&
1415 		    time_after64(vtime, vdone) &&
1416 		    time_after64(vtime, now.vnow -
1417 				 MAX_LAGGING_PERIODS * period_vtime) &&
1418 		    time_before64(vdone, now.vnow - period_vtime))
1419 			nr_lagging++;
1420 
1421 		if (waitqueue_active(&iocg->waitq))
1422 			vusage = now.vnow - iocg->last_vtime;
1423 		else if (time_before64(iocg->last_vtime, vtime))
1424 			vusage = vtime - iocg->last_vtime;
1425 		else
1426 			vusage = 0;
1427 
1428 		iocg->last_vtime += vusage;
1429 		/*
1430 		 * Factor in in-flight vtime into vusage to avoid
1431 		 * high-latency completions appearing as idle.  This should
1432 		 * be done after the above ->last_time adjustment.
1433 		 */
1434 		vusage = max(vusage, vtime - vdone);
1435 
1436 		/* calculate hweight based usage ratio and record */
1437 		if (vusage) {
1438 			usage = DIV64_U64_ROUND_UP(vusage * hw_inuse,
1439 						   period_vtime);
1440 			iocg->usage_idx = (iocg->usage_idx + 1) % NR_USAGE_SLOTS;
1441 			iocg->usages[iocg->usage_idx] = usage;
1442 		} else {
1443 			usage = 0;
1444 		}
1445 
1446 		/* see whether there's surplus vtime */
1447 		vmargin = ioc->margin_us * now.vrate;
1448 		vmin = now.vnow - vmargin;
1449 
1450 		iocg->has_surplus = false;
1451 
1452 		if (!waitqueue_active(&iocg->waitq) &&
1453 		    time_before64(vtime, vmin)) {
1454 			u64 delta = vmin - vtime;
1455 
1456 			/* throw away surplus vtime */
1457 			atomic64_add(delta, &iocg->vtime);
1458 			atomic64_add(delta, &iocg->done_vtime);
1459 			iocg->last_vtime += delta;
1460 			/* if usage is sufficiently low, maybe it can donate */
1461 			if (surplus_adjusted_hweight_inuse(usage, hw_inuse)) {
1462 				iocg->has_surplus = true;
1463 				nr_surpluses++;
1464 			}
1465 		} else if (hw_inuse < hw_active) {
1466 			u32 new_hwi, new_inuse;
1467 
1468 			/* was donating but might need to take back some */
1469 			if (waitqueue_active(&iocg->waitq)) {
1470 				new_hwi = hw_active;
1471 			} else {
1472 				new_hwi = max(hw_inuse,
1473 					      usage * SURPLUS_SCALE_PCT / 100 +
1474 					      SURPLUS_SCALE_ABS);
1475 			}
1476 
1477 			new_inuse = div64_u64((u64)iocg->inuse * new_hwi,
1478 					      hw_inuse);
1479 			new_inuse = clamp_t(u32, new_inuse, 1, iocg->active);
1480 
1481 			if (new_inuse > iocg->inuse) {
1482 				TRACE_IOCG_PATH(inuse_takeback, iocg, &now,
1483 						iocg->inuse, new_inuse,
1484 						hw_inuse, new_hwi);
1485 				__propagate_active_weight(iocg, iocg->weight,
1486 							  new_inuse);
1487 			}
1488 		} else {
1489 			/* genuninely out of vtime */
1490 			nr_shortages++;
1491 		}
1492 	}
1493 
1494 	if (!nr_shortages || !nr_surpluses)
1495 		goto skip_surplus_transfers;
1496 
1497 	/* there are both shortages and surpluses, transfer surpluses */
1498 	list_for_each_entry(iocg, &ioc->active_iocgs, active_list) {
1499 		u32 usage, hw_active, hw_inuse, new_hwi, new_inuse;
1500 		int nr_valid = 0;
1501 
1502 		if (!iocg->has_surplus)
1503 			continue;
1504 
1505 		/* base the decision on max historical usage */
1506 		for (i = 0, usage = 0; i < NR_USAGE_SLOTS; i++) {
1507 			if (iocg->usages[i]) {
1508 				usage = max(usage, iocg->usages[i]);
1509 				nr_valid++;
1510 			}
1511 		}
1512 		if (nr_valid < MIN_VALID_USAGES)
1513 			continue;
1514 
1515 		current_hweight(iocg, &hw_active, &hw_inuse);
1516 		new_hwi = surplus_adjusted_hweight_inuse(usage, hw_inuse);
1517 		if (!new_hwi)
1518 			continue;
1519 
1520 		new_inuse = DIV64_U64_ROUND_UP((u64)iocg->inuse * new_hwi,
1521 					       hw_inuse);
1522 		if (new_inuse < iocg->inuse) {
1523 			TRACE_IOCG_PATH(inuse_giveaway, iocg, &now,
1524 					iocg->inuse, new_inuse,
1525 					hw_inuse, new_hwi);
1526 			__propagate_active_weight(iocg, iocg->weight, new_inuse);
1527 		}
1528 	}
1529 skip_surplus_transfers:
1530 	commit_active_weights(ioc);
1531 
1532 	/*
1533 	 * If q is getting clogged or we're missing too much, we're issuing
1534 	 * too much IO and should lower vtime rate.  If we're not missing
1535 	 * and experiencing shortages but not surpluses, we're too stingy
1536 	 * and should increase vtime rate.
1537 	 */
1538 	prev_busy_level = ioc->busy_level;
1539 	if (rq_wait_pct > RQ_WAIT_BUSY_PCT ||
1540 	    missed_ppm[READ] > ppm_rthr ||
1541 	    missed_ppm[WRITE] > ppm_wthr) {
1542 		/* clearly missing QoS targets, slow down vrate */
1543 		ioc->busy_level = max(ioc->busy_level, 0);
1544 		ioc->busy_level++;
1545 	} else if (rq_wait_pct <= RQ_WAIT_BUSY_PCT * UNBUSY_THR_PCT / 100 &&
1546 		   missed_ppm[READ] <= ppm_rthr * UNBUSY_THR_PCT / 100 &&
1547 		   missed_ppm[WRITE] <= ppm_wthr * UNBUSY_THR_PCT / 100) {
1548 		/* QoS targets are being met with >25% margin */
1549 		if (nr_shortages) {
1550 			/*
1551 			 * We're throttling while the device has spare
1552 			 * capacity.  If vrate was being slowed down, stop.
1553 			 */
1554 			ioc->busy_level = min(ioc->busy_level, 0);
1555 
1556 			/*
1557 			 * If there are IOs spanning multiple periods, wait
1558 			 * them out before pushing the device harder.  If
1559 			 * there are surpluses, let redistribution work it
1560 			 * out first.
1561 			 */
1562 			if (!nr_lagging && !nr_surpluses)
1563 				ioc->busy_level--;
1564 		} else {
1565 			/*
1566 			 * Nobody is being throttled and the users aren't
1567 			 * issuing enough IOs to saturate the device.  We
1568 			 * simply don't know how close the device is to
1569 			 * saturation.  Coast.
1570 			 */
1571 			ioc->busy_level = 0;
1572 		}
1573 	} else {
1574 		/* inside the hysterisis margin, we're good */
1575 		ioc->busy_level = 0;
1576 	}
1577 
1578 	ioc->busy_level = clamp(ioc->busy_level, -1000, 1000);
1579 
1580 	if (ioc->busy_level > 0 || (ioc->busy_level < 0 && !nr_lagging)) {
1581 		u64 vrate = atomic64_read(&ioc->vtime_rate);
1582 		u64 vrate_min = ioc->vrate_min, vrate_max = ioc->vrate_max;
1583 
1584 		/* rq_wait signal is always reliable, ignore user vrate_min */
1585 		if (rq_wait_pct > RQ_WAIT_BUSY_PCT)
1586 			vrate_min = VRATE_MIN;
1587 
1588 		/*
1589 		 * If vrate is out of bounds, apply clamp gradually as the
1590 		 * bounds can change abruptly.  Otherwise, apply busy_level
1591 		 * based adjustment.
1592 		 */
1593 		if (vrate < vrate_min) {
1594 			vrate = div64_u64(vrate * (100 + VRATE_CLAMP_ADJ_PCT),
1595 					  100);
1596 			vrate = min(vrate, vrate_min);
1597 		} else if (vrate > vrate_max) {
1598 			vrate = div64_u64(vrate * (100 - VRATE_CLAMP_ADJ_PCT),
1599 					  100);
1600 			vrate = max(vrate, vrate_max);
1601 		} else {
1602 			int idx = min_t(int, abs(ioc->busy_level),
1603 					ARRAY_SIZE(vrate_adj_pct) - 1);
1604 			u32 adj_pct = vrate_adj_pct[idx];
1605 
1606 			if (ioc->busy_level > 0)
1607 				adj_pct = 100 - adj_pct;
1608 			else
1609 				adj_pct = 100 + adj_pct;
1610 
1611 			vrate = clamp(DIV64_U64_ROUND_UP(vrate * adj_pct, 100),
1612 				      vrate_min, vrate_max);
1613 		}
1614 
1615 		trace_iocost_ioc_vrate_adj(ioc, vrate, missed_ppm, rq_wait_pct,
1616 					   nr_lagging, nr_shortages,
1617 					   nr_surpluses);
1618 
1619 		atomic64_set(&ioc->vtime_rate, vrate);
1620 		ioc->inuse_margin_vtime = DIV64_U64_ROUND_UP(
1621 			ioc->period_us * vrate * INUSE_MARGIN_PCT, 100);
1622 	} else if (ioc->busy_level != prev_busy_level || nr_lagging) {
1623 		trace_iocost_ioc_vrate_adj(ioc, atomic64_read(&ioc->vtime_rate),
1624 					   missed_ppm, rq_wait_pct, nr_lagging,
1625 					   nr_shortages, nr_surpluses);
1626 	}
1627 
1628 	ioc_refresh_params(ioc, false);
1629 
1630 	/*
1631 	 * This period is done.  Move onto the next one.  If nothing's
1632 	 * going on with the device, stop the timer.
1633 	 */
1634 	atomic64_inc(&ioc->cur_period);
1635 
1636 	if (ioc->running != IOC_STOP) {
1637 		if (!list_empty(&ioc->active_iocgs)) {
1638 			ioc_start_period(ioc, &now);
1639 		} else {
1640 			ioc->busy_level = 0;
1641 			ioc->running = IOC_IDLE;
1642 		}
1643 	}
1644 
1645 	spin_unlock_irq(&ioc->lock);
1646 }
1647 
1648 static void calc_vtime_cost_builtin(struct bio *bio, struct ioc_gq *iocg,
1649 				    bool is_merge, u64 *costp)
1650 {
1651 	struct ioc *ioc = iocg->ioc;
1652 	u64 coef_seqio, coef_randio, coef_page;
1653 	u64 pages = max_t(u64, bio_sectors(bio) >> IOC_SECT_TO_PAGE_SHIFT, 1);
1654 	u64 seek_pages = 0;
1655 	u64 cost = 0;
1656 
1657 	switch (bio_op(bio)) {
1658 	case REQ_OP_READ:
1659 		coef_seqio	= ioc->params.lcoefs[LCOEF_RSEQIO];
1660 		coef_randio	= ioc->params.lcoefs[LCOEF_RRANDIO];
1661 		coef_page	= ioc->params.lcoefs[LCOEF_RPAGE];
1662 		break;
1663 	case REQ_OP_WRITE:
1664 		coef_seqio	= ioc->params.lcoefs[LCOEF_WSEQIO];
1665 		coef_randio	= ioc->params.lcoefs[LCOEF_WRANDIO];
1666 		coef_page	= ioc->params.lcoefs[LCOEF_WPAGE];
1667 		break;
1668 	default:
1669 		goto out;
1670 	}
1671 
1672 	if (iocg->cursor) {
1673 		seek_pages = abs(bio->bi_iter.bi_sector - iocg->cursor);
1674 		seek_pages >>= IOC_SECT_TO_PAGE_SHIFT;
1675 	}
1676 
1677 	if (!is_merge) {
1678 		if (seek_pages > LCOEF_RANDIO_PAGES) {
1679 			cost += coef_randio;
1680 		} else {
1681 			cost += coef_seqio;
1682 		}
1683 	}
1684 	cost += pages * coef_page;
1685 out:
1686 	*costp = cost;
1687 }
1688 
1689 static u64 calc_vtime_cost(struct bio *bio, struct ioc_gq *iocg, bool is_merge)
1690 {
1691 	u64 cost;
1692 
1693 	calc_vtime_cost_builtin(bio, iocg, is_merge, &cost);
1694 	return cost;
1695 }
1696 
1697 static void calc_size_vtime_cost_builtin(struct request *rq, struct ioc *ioc,
1698 					 u64 *costp)
1699 {
1700 	unsigned int pages = blk_rq_stats_sectors(rq) >> IOC_SECT_TO_PAGE_SHIFT;
1701 
1702 	switch (req_op(rq)) {
1703 	case REQ_OP_READ:
1704 		*costp = pages * ioc->params.lcoefs[LCOEF_RPAGE];
1705 		break;
1706 	case REQ_OP_WRITE:
1707 		*costp = pages * ioc->params.lcoefs[LCOEF_WPAGE];
1708 		break;
1709 	default:
1710 		*costp = 0;
1711 	}
1712 }
1713 
1714 static u64 calc_size_vtime_cost(struct request *rq, struct ioc *ioc)
1715 {
1716 	u64 cost;
1717 
1718 	calc_size_vtime_cost_builtin(rq, ioc, &cost);
1719 	return cost;
1720 }
1721 
1722 static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio)
1723 {
1724 	struct blkcg_gq *blkg = bio->bi_blkg;
1725 	struct ioc *ioc = rqos_to_ioc(rqos);
1726 	struct ioc_gq *iocg = blkg_to_iocg(blkg);
1727 	struct ioc_now now;
1728 	struct iocg_wait wait;
1729 	u32 hw_active, hw_inuse;
1730 	u64 abs_cost, cost, vtime;
1731 
1732 	/* bypass IOs if disabled or for root cgroup */
1733 	if (!ioc->enabled || !iocg->level)
1734 		return;
1735 
1736 	/* always activate so that even 0 cost IOs get protected to some level */
1737 	if (!iocg_activate(iocg, &now))
1738 		return;
1739 
1740 	/* calculate the absolute vtime cost */
1741 	abs_cost = calc_vtime_cost(bio, iocg, false);
1742 	if (!abs_cost)
1743 		return;
1744 
1745 	iocg->cursor = bio_end_sector(bio);
1746 
1747 	vtime = atomic64_read(&iocg->vtime);
1748 	current_hweight(iocg, &hw_active, &hw_inuse);
1749 
1750 	if (hw_inuse < hw_active &&
1751 	    time_after_eq64(vtime + ioc->inuse_margin_vtime, now.vnow)) {
1752 		TRACE_IOCG_PATH(inuse_reset, iocg, &now,
1753 				iocg->inuse, iocg->weight, hw_inuse, hw_active);
1754 		spin_lock_irq(&ioc->lock);
1755 		propagate_active_weight(iocg, iocg->weight, iocg->weight);
1756 		spin_unlock_irq(&ioc->lock);
1757 		current_hweight(iocg, &hw_active, &hw_inuse);
1758 	}
1759 
1760 	cost = abs_cost_to_cost(abs_cost, hw_inuse);
1761 
1762 	/*
1763 	 * If no one's waiting and within budget, issue right away.  The
1764 	 * tests are racy but the races aren't systemic - we only miss once
1765 	 * in a while which is fine.
1766 	 */
1767 	if (!waitqueue_active(&iocg->waitq) && !iocg->abs_vdebt &&
1768 	    time_before_eq64(vtime + cost, now.vnow)) {
1769 		iocg_commit_bio(iocg, bio, cost);
1770 		return;
1771 	}
1772 
1773 	/*
1774 	 * We activated above but w/o any synchronization. Deactivation is
1775 	 * synchronized with waitq.lock and we won't get deactivated as long
1776 	 * as we're waiting or has debt, so we're good if we're activated
1777 	 * here. In the unlikely case that we aren't, just issue the IO.
1778 	 */
1779 	spin_lock_irq(&iocg->waitq.lock);
1780 
1781 	if (unlikely(list_empty(&iocg->active_list))) {
1782 		spin_unlock_irq(&iocg->waitq.lock);
1783 		iocg_commit_bio(iocg, bio, cost);
1784 		return;
1785 	}
1786 
1787 	/*
1788 	 * We're over budget. If @bio has to be issued regardless, remember
1789 	 * the abs_cost instead of advancing vtime. iocg_kick_waitq() will pay
1790 	 * off the debt before waking more IOs.
1791 	 *
1792 	 * This way, the debt is continuously paid off each period with the
1793 	 * actual budget available to the cgroup. If we just wound vtime, we
1794 	 * would incorrectly use the current hw_inuse for the entire amount
1795 	 * which, for example, can lead to the cgroup staying blocked for a
1796 	 * long time even with substantially raised hw_inuse.
1797 	 *
1798 	 * An iocg with vdebt should stay online so that the timer can keep
1799 	 * deducting its vdebt and [de]activate use_delay mechanism
1800 	 * accordingly. We don't want to race against the timer trying to
1801 	 * clear them and leave @iocg inactive w/ dangling use_delay heavily
1802 	 * penalizing the cgroup and its descendants.
1803 	 */
1804 	if (bio_issue_as_root_blkg(bio) || fatal_signal_pending(current)) {
1805 		iocg->abs_vdebt += abs_cost;
1806 		if (iocg_kick_delay(iocg, &now))
1807 			blkcg_schedule_throttle(rqos->q,
1808 					(bio->bi_opf & REQ_SWAP) == REQ_SWAP);
1809 		spin_unlock_irq(&iocg->waitq.lock);
1810 		return;
1811 	}
1812 
1813 	/*
1814 	 * Append self to the waitq and schedule the wakeup timer if we're
1815 	 * the first waiter.  The timer duration is calculated based on the
1816 	 * current vrate.  vtime and hweight changes can make it too short
1817 	 * or too long.  Each wait entry records the absolute cost it's
1818 	 * waiting for to allow re-evaluation using a custom wait entry.
1819 	 *
1820 	 * If too short, the timer simply reschedules itself.  If too long,
1821 	 * the period timer will notice and trigger wakeups.
1822 	 *
1823 	 * All waiters are on iocg->waitq and the wait states are
1824 	 * synchronized using waitq.lock.
1825 	 */
1826 	init_waitqueue_func_entry(&wait.wait, iocg_wake_fn);
1827 	wait.wait.private = current;
1828 	wait.bio = bio;
1829 	wait.abs_cost = abs_cost;
1830 	wait.committed = false;	/* will be set true by waker */
1831 
1832 	__add_wait_queue_entry_tail(&iocg->waitq, &wait.wait);
1833 	iocg_kick_waitq(iocg, &now);
1834 
1835 	spin_unlock_irq(&iocg->waitq.lock);
1836 
1837 	while (true) {
1838 		set_current_state(TASK_UNINTERRUPTIBLE);
1839 		if (wait.committed)
1840 			break;
1841 		io_schedule();
1842 	}
1843 
1844 	/* waker already committed us, proceed */
1845 	finish_wait(&iocg->waitq, &wait.wait);
1846 }
1847 
1848 static void ioc_rqos_merge(struct rq_qos *rqos, struct request *rq,
1849 			   struct bio *bio)
1850 {
1851 	struct ioc_gq *iocg = blkg_to_iocg(bio->bi_blkg);
1852 	struct ioc *ioc = iocg->ioc;
1853 	sector_t bio_end = bio_end_sector(bio);
1854 	struct ioc_now now;
1855 	u32 hw_inuse;
1856 	u64 abs_cost, cost;
1857 	unsigned long flags;
1858 
1859 	/* bypass if disabled or for root cgroup */
1860 	if (!ioc->enabled || !iocg->level)
1861 		return;
1862 
1863 	abs_cost = calc_vtime_cost(bio, iocg, true);
1864 	if (!abs_cost)
1865 		return;
1866 
1867 	ioc_now(ioc, &now);
1868 	current_hweight(iocg, NULL, &hw_inuse);
1869 	cost = abs_cost_to_cost(abs_cost, hw_inuse);
1870 
1871 	/* update cursor if backmerging into the request at the cursor */
1872 	if (blk_rq_pos(rq) < bio_end &&
1873 	    blk_rq_pos(rq) + blk_rq_sectors(rq) == iocg->cursor)
1874 		iocg->cursor = bio_end;
1875 
1876 	/*
1877 	 * Charge if there's enough vtime budget and the existing request has
1878 	 * cost assigned.
1879 	 */
1880 	if (rq->bio && rq->bio->bi_iocost_cost &&
1881 	    time_before_eq64(atomic64_read(&iocg->vtime) + cost, now.vnow)) {
1882 		iocg_commit_bio(iocg, bio, cost);
1883 		return;
1884 	}
1885 
1886 	/*
1887 	 * Otherwise, account it as debt if @iocg is online, which it should
1888 	 * be for the vast majority of cases. See debt handling in
1889 	 * ioc_rqos_throttle() for details.
1890 	 */
1891 	spin_lock_irqsave(&iocg->waitq.lock, flags);
1892 	if (likely(!list_empty(&iocg->active_list))) {
1893 		iocg->abs_vdebt += abs_cost;
1894 		iocg_kick_delay(iocg, &now);
1895 	} else {
1896 		iocg_commit_bio(iocg, bio, cost);
1897 	}
1898 	spin_unlock_irqrestore(&iocg->waitq.lock, flags);
1899 }
1900 
1901 static void ioc_rqos_done_bio(struct rq_qos *rqos, struct bio *bio)
1902 {
1903 	struct ioc_gq *iocg = blkg_to_iocg(bio->bi_blkg);
1904 
1905 	if (iocg && bio->bi_iocost_cost)
1906 		atomic64_add(bio->bi_iocost_cost, &iocg->done_vtime);
1907 }
1908 
1909 static void ioc_rqos_done(struct rq_qos *rqos, struct request *rq)
1910 {
1911 	struct ioc *ioc = rqos_to_ioc(rqos);
1912 	u64 on_q_ns, rq_wait_ns, size_nsec;
1913 	int pidx, rw;
1914 
1915 	if (!ioc->enabled || !rq->alloc_time_ns || !rq->start_time_ns)
1916 		return;
1917 
1918 	switch (req_op(rq) & REQ_OP_MASK) {
1919 	case REQ_OP_READ:
1920 		pidx = QOS_RLAT;
1921 		rw = READ;
1922 		break;
1923 	case REQ_OP_WRITE:
1924 		pidx = QOS_WLAT;
1925 		rw = WRITE;
1926 		break;
1927 	default:
1928 		return;
1929 	}
1930 
1931 	on_q_ns = ktime_get_ns() - rq->alloc_time_ns;
1932 	rq_wait_ns = rq->start_time_ns - rq->alloc_time_ns;
1933 	size_nsec = div64_u64(calc_size_vtime_cost(rq, ioc), VTIME_PER_NSEC);
1934 
1935 	if (on_q_ns <= size_nsec ||
1936 	    on_q_ns - size_nsec <= ioc->params.qos[pidx] * NSEC_PER_USEC)
1937 		this_cpu_inc(ioc->pcpu_stat->missed[rw].nr_met);
1938 	else
1939 		this_cpu_inc(ioc->pcpu_stat->missed[rw].nr_missed);
1940 
1941 	this_cpu_add(ioc->pcpu_stat->rq_wait_ns, rq_wait_ns);
1942 }
1943 
1944 static void ioc_rqos_queue_depth_changed(struct rq_qos *rqos)
1945 {
1946 	struct ioc *ioc = rqos_to_ioc(rqos);
1947 
1948 	spin_lock_irq(&ioc->lock);
1949 	ioc_refresh_params(ioc, false);
1950 	spin_unlock_irq(&ioc->lock);
1951 }
1952 
1953 static void ioc_rqos_exit(struct rq_qos *rqos)
1954 {
1955 	struct ioc *ioc = rqos_to_ioc(rqos);
1956 
1957 	blkcg_deactivate_policy(rqos->q, &blkcg_policy_iocost);
1958 
1959 	spin_lock_irq(&ioc->lock);
1960 	ioc->running = IOC_STOP;
1961 	spin_unlock_irq(&ioc->lock);
1962 
1963 	del_timer_sync(&ioc->timer);
1964 	free_percpu(ioc->pcpu_stat);
1965 	kfree(ioc);
1966 }
1967 
1968 static struct rq_qos_ops ioc_rqos_ops = {
1969 	.throttle = ioc_rqos_throttle,
1970 	.merge = ioc_rqos_merge,
1971 	.done_bio = ioc_rqos_done_bio,
1972 	.done = ioc_rqos_done,
1973 	.queue_depth_changed = ioc_rqos_queue_depth_changed,
1974 	.exit = ioc_rqos_exit,
1975 };
1976 
1977 static int blk_iocost_init(struct request_queue *q)
1978 {
1979 	struct ioc *ioc;
1980 	struct rq_qos *rqos;
1981 	int ret;
1982 
1983 	ioc = kzalloc(sizeof(*ioc), GFP_KERNEL);
1984 	if (!ioc)
1985 		return -ENOMEM;
1986 
1987 	ioc->pcpu_stat = alloc_percpu(struct ioc_pcpu_stat);
1988 	if (!ioc->pcpu_stat) {
1989 		kfree(ioc);
1990 		return -ENOMEM;
1991 	}
1992 
1993 	rqos = &ioc->rqos;
1994 	rqos->id = RQ_QOS_COST;
1995 	rqos->ops = &ioc_rqos_ops;
1996 	rqos->q = q;
1997 
1998 	spin_lock_init(&ioc->lock);
1999 	timer_setup(&ioc->timer, ioc_timer_fn, 0);
2000 	INIT_LIST_HEAD(&ioc->active_iocgs);
2001 
2002 	ioc->running = IOC_IDLE;
2003 	atomic64_set(&ioc->vtime_rate, VTIME_PER_USEC);
2004 	seqcount_init(&ioc->period_seqcount);
2005 	ioc->period_at = ktime_to_us(ktime_get());
2006 	atomic64_set(&ioc->cur_period, 0);
2007 	atomic_set(&ioc->hweight_gen, 0);
2008 
2009 	spin_lock_irq(&ioc->lock);
2010 	ioc->autop_idx = AUTOP_INVALID;
2011 	ioc_refresh_params(ioc, true);
2012 	spin_unlock_irq(&ioc->lock);
2013 
2014 	rq_qos_add(q, rqos);
2015 	ret = blkcg_activate_policy(q, &blkcg_policy_iocost);
2016 	if (ret) {
2017 		rq_qos_del(q, rqos);
2018 		free_percpu(ioc->pcpu_stat);
2019 		kfree(ioc);
2020 		return ret;
2021 	}
2022 	return 0;
2023 }
2024 
2025 static struct blkcg_policy_data *ioc_cpd_alloc(gfp_t gfp)
2026 {
2027 	struct ioc_cgrp *iocc;
2028 
2029 	iocc = kzalloc(sizeof(struct ioc_cgrp), gfp);
2030 	if (!iocc)
2031 		return NULL;
2032 
2033 	iocc->dfl_weight = CGROUP_WEIGHT_DFL;
2034 	return &iocc->cpd;
2035 }
2036 
2037 static void ioc_cpd_free(struct blkcg_policy_data *cpd)
2038 {
2039 	kfree(container_of(cpd, struct ioc_cgrp, cpd));
2040 }
2041 
2042 static struct blkg_policy_data *ioc_pd_alloc(gfp_t gfp, struct request_queue *q,
2043 					     struct blkcg *blkcg)
2044 {
2045 	int levels = blkcg->css.cgroup->level + 1;
2046 	struct ioc_gq *iocg;
2047 
2048 	iocg = kzalloc_node(sizeof(*iocg) + levels * sizeof(iocg->ancestors[0]),
2049 			    gfp, q->node);
2050 	if (!iocg)
2051 		return NULL;
2052 
2053 	return &iocg->pd;
2054 }
2055 
2056 static void ioc_pd_init(struct blkg_policy_data *pd)
2057 {
2058 	struct ioc_gq *iocg = pd_to_iocg(pd);
2059 	struct blkcg_gq *blkg = pd_to_blkg(&iocg->pd);
2060 	struct ioc *ioc = q_to_ioc(blkg->q);
2061 	struct ioc_now now;
2062 	struct blkcg_gq *tblkg;
2063 	unsigned long flags;
2064 
2065 	ioc_now(ioc, &now);
2066 
2067 	iocg->ioc = ioc;
2068 	atomic64_set(&iocg->vtime, now.vnow);
2069 	atomic64_set(&iocg->done_vtime, now.vnow);
2070 	atomic64_set(&iocg->active_period, atomic64_read(&ioc->cur_period));
2071 	INIT_LIST_HEAD(&iocg->active_list);
2072 	iocg->hweight_active = HWEIGHT_WHOLE;
2073 	iocg->hweight_inuse = HWEIGHT_WHOLE;
2074 
2075 	init_waitqueue_head(&iocg->waitq);
2076 	hrtimer_init(&iocg->waitq_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2077 	iocg->waitq_timer.function = iocg_waitq_timer_fn;
2078 	hrtimer_init(&iocg->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2079 	iocg->delay_timer.function = iocg_delay_timer_fn;
2080 
2081 	iocg->level = blkg->blkcg->css.cgroup->level;
2082 
2083 	for (tblkg = blkg; tblkg; tblkg = tblkg->parent) {
2084 		struct ioc_gq *tiocg = blkg_to_iocg(tblkg);
2085 		iocg->ancestors[tiocg->level] = tiocg;
2086 	}
2087 
2088 	spin_lock_irqsave(&ioc->lock, flags);
2089 	weight_updated(iocg);
2090 	spin_unlock_irqrestore(&ioc->lock, flags);
2091 }
2092 
2093 static void ioc_pd_free(struct blkg_policy_data *pd)
2094 {
2095 	struct ioc_gq *iocg = pd_to_iocg(pd);
2096 	struct ioc *ioc = iocg->ioc;
2097 
2098 	if (ioc) {
2099 		spin_lock(&ioc->lock);
2100 		if (!list_empty(&iocg->active_list)) {
2101 			propagate_active_weight(iocg, 0, 0);
2102 			list_del_init(&iocg->active_list);
2103 		}
2104 		spin_unlock(&ioc->lock);
2105 
2106 		hrtimer_cancel(&iocg->waitq_timer);
2107 		hrtimer_cancel(&iocg->delay_timer);
2108 	}
2109 	kfree(iocg);
2110 }
2111 
2112 static u64 ioc_weight_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
2113 			     int off)
2114 {
2115 	const char *dname = blkg_dev_name(pd->blkg);
2116 	struct ioc_gq *iocg = pd_to_iocg(pd);
2117 
2118 	if (dname && iocg->cfg_weight)
2119 		seq_printf(sf, "%s %u\n", dname, iocg->cfg_weight);
2120 	return 0;
2121 }
2122 
2123 
2124 static int ioc_weight_show(struct seq_file *sf, void *v)
2125 {
2126 	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
2127 	struct ioc_cgrp *iocc = blkcg_to_iocc(blkcg);
2128 
2129 	seq_printf(sf, "default %u\n", iocc->dfl_weight);
2130 	blkcg_print_blkgs(sf, blkcg, ioc_weight_prfill,
2131 			  &blkcg_policy_iocost, seq_cft(sf)->private, false);
2132 	return 0;
2133 }
2134 
2135 static ssize_t ioc_weight_write(struct kernfs_open_file *of, char *buf,
2136 				size_t nbytes, loff_t off)
2137 {
2138 	struct blkcg *blkcg = css_to_blkcg(of_css(of));
2139 	struct ioc_cgrp *iocc = blkcg_to_iocc(blkcg);
2140 	struct blkg_conf_ctx ctx;
2141 	struct ioc_gq *iocg;
2142 	u32 v;
2143 	int ret;
2144 
2145 	if (!strchr(buf, ':')) {
2146 		struct blkcg_gq *blkg;
2147 
2148 		if (!sscanf(buf, "default %u", &v) && !sscanf(buf, "%u", &v))
2149 			return -EINVAL;
2150 
2151 		if (v < CGROUP_WEIGHT_MIN || v > CGROUP_WEIGHT_MAX)
2152 			return -EINVAL;
2153 
2154 		spin_lock(&blkcg->lock);
2155 		iocc->dfl_weight = v;
2156 		hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) {
2157 			struct ioc_gq *iocg = blkg_to_iocg(blkg);
2158 
2159 			if (iocg) {
2160 				spin_lock_irq(&iocg->ioc->lock);
2161 				weight_updated(iocg);
2162 				spin_unlock_irq(&iocg->ioc->lock);
2163 			}
2164 		}
2165 		spin_unlock(&blkcg->lock);
2166 
2167 		return nbytes;
2168 	}
2169 
2170 	ret = blkg_conf_prep(blkcg, &blkcg_policy_iocost, buf, &ctx);
2171 	if (ret)
2172 		return ret;
2173 
2174 	iocg = blkg_to_iocg(ctx.blkg);
2175 
2176 	if (!strncmp(ctx.body, "default", 7)) {
2177 		v = 0;
2178 	} else {
2179 		if (!sscanf(ctx.body, "%u", &v))
2180 			goto einval;
2181 		if (v < CGROUP_WEIGHT_MIN || v > CGROUP_WEIGHT_MAX)
2182 			goto einval;
2183 	}
2184 
2185 	spin_lock(&iocg->ioc->lock);
2186 	iocg->cfg_weight = v;
2187 	weight_updated(iocg);
2188 	spin_unlock(&iocg->ioc->lock);
2189 
2190 	blkg_conf_finish(&ctx);
2191 	return nbytes;
2192 
2193 einval:
2194 	blkg_conf_finish(&ctx);
2195 	return -EINVAL;
2196 }
2197 
2198 static u64 ioc_qos_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
2199 			  int off)
2200 {
2201 	const char *dname = blkg_dev_name(pd->blkg);
2202 	struct ioc *ioc = pd_to_iocg(pd)->ioc;
2203 
2204 	if (!dname)
2205 		return 0;
2206 
2207 	seq_printf(sf, "%s enable=%d ctrl=%s rpct=%u.%02u rlat=%u wpct=%u.%02u wlat=%u min=%u.%02u max=%u.%02u\n",
2208 		   dname, ioc->enabled, ioc->user_qos_params ? "user" : "auto",
2209 		   ioc->params.qos[QOS_RPPM] / 10000,
2210 		   ioc->params.qos[QOS_RPPM] % 10000 / 100,
2211 		   ioc->params.qos[QOS_RLAT],
2212 		   ioc->params.qos[QOS_WPPM] / 10000,
2213 		   ioc->params.qos[QOS_WPPM] % 10000 / 100,
2214 		   ioc->params.qos[QOS_WLAT],
2215 		   ioc->params.qos[QOS_MIN] / 10000,
2216 		   ioc->params.qos[QOS_MIN] % 10000 / 100,
2217 		   ioc->params.qos[QOS_MAX] / 10000,
2218 		   ioc->params.qos[QOS_MAX] % 10000 / 100);
2219 	return 0;
2220 }
2221 
2222 static int ioc_qos_show(struct seq_file *sf, void *v)
2223 {
2224 	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
2225 
2226 	blkcg_print_blkgs(sf, blkcg, ioc_qos_prfill,
2227 			  &blkcg_policy_iocost, seq_cft(sf)->private, false);
2228 	return 0;
2229 }
2230 
2231 static const match_table_t qos_ctrl_tokens = {
2232 	{ QOS_ENABLE,		"enable=%u"	},
2233 	{ QOS_CTRL,		"ctrl=%s"	},
2234 	{ NR_QOS_CTRL_PARAMS,	NULL		},
2235 };
2236 
2237 static const match_table_t qos_tokens = {
2238 	{ QOS_RPPM,		"rpct=%s"	},
2239 	{ QOS_RLAT,		"rlat=%u"	},
2240 	{ QOS_WPPM,		"wpct=%s"	},
2241 	{ QOS_WLAT,		"wlat=%u"	},
2242 	{ QOS_MIN,		"min=%s"	},
2243 	{ QOS_MAX,		"max=%s"	},
2244 	{ NR_QOS_PARAMS,	NULL		},
2245 };
2246 
2247 static ssize_t ioc_qos_write(struct kernfs_open_file *of, char *input,
2248 			     size_t nbytes, loff_t off)
2249 {
2250 	struct gendisk *disk;
2251 	struct ioc *ioc;
2252 	u32 qos[NR_QOS_PARAMS];
2253 	bool enable, user;
2254 	char *p;
2255 	int ret;
2256 
2257 	disk = blkcg_conf_get_disk(&input);
2258 	if (IS_ERR(disk))
2259 		return PTR_ERR(disk);
2260 
2261 	ioc = q_to_ioc(disk->queue);
2262 	if (!ioc) {
2263 		ret = blk_iocost_init(disk->queue);
2264 		if (ret)
2265 			goto err;
2266 		ioc = q_to_ioc(disk->queue);
2267 	}
2268 
2269 	spin_lock_irq(&ioc->lock);
2270 	memcpy(qos, ioc->params.qos, sizeof(qos));
2271 	enable = ioc->enabled;
2272 	user = ioc->user_qos_params;
2273 	spin_unlock_irq(&ioc->lock);
2274 
2275 	while ((p = strsep(&input, " \t\n"))) {
2276 		substring_t args[MAX_OPT_ARGS];
2277 		char buf[32];
2278 		int tok;
2279 		s64 v;
2280 
2281 		if (!*p)
2282 			continue;
2283 
2284 		switch (match_token(p, qos_ctrl_tokens, args)) {
2285 		case QOS_ENABLE:
2286 			match_u64(&args[0], &v);
2287 			enable = v;
2288 			continue;
2289 		case QOS_CTRL:
2290 			match_strlcpy(buf, &args[0], sizeof(buf));
2291 			if (!strcmp(buf, "auto"))
2292 				user = false;
2293 			else if (!strcmp(buf, "user"))
2294 				user = true;
2295 			else
2296 				goto einval;
2297 			continue;
2298 		}
2299 
2300 		tok = match_token(p, qos_tokens, args);
2301 		switch (tok) {
2302 		case QOS_RPPM:
2303 		case QOS_WPPM:
2304 			if (match_strlcpy(buf, &args[0], sizeof(buf)) >=
2305 			    sizeof(buf))
2306 				goto einval;
2307 			if (cgroup_parse_float(buf, 2, &v))
2308 				goto einval;
2309 			if (v < 0 || v > 10000)
2310 				goto einval;
2311 			qos[tok] = v * 100;
2312 			break;
2313 		case QOS_RLAT:
2314 		case QOS_WLAT:
2315 			if (match_u64(&args[0], &v))
2316 				goto einval;
2317 			qos[tok] = v;
2318 			break;
2319 		case QOS_MIN:
2320 		case QOS_MAX:
2321 			if (match_strlcpy(buf, &args[0], sizeof(buf)) >=
2322 			    sizeof(buf))
2323 				goto einval;
2324 			if (cgroup_parse_float(buf, 2, &v))
2325 				goto einval;
2326 			if (v < 0)
2327 				goto einval;
2328 			qos[tok] = clamp_t(s64, v * 100,
2329 					   VRATE_MIN_PPM, VRATE_MAX_PPM);
2330 			break;
2331 		default:
2332 			goto einval;
2333 		}
2334 		user = true;
2335 	}
2336 
2337 	if (qos[QOS_MIN] > qos[QOS_MAX])
2338 		goto einval;
2339 
2340 	spin_lock_irq(&ioc->lock);
2341 
2342 	if (enable) {
2343 		blk_stat_enable_accounting(ioc->rqos.q);
2344 		blk_queue_flag_set(QUEUE_FLAG_RQ_ALLOC_TIME, ioc->rqos.q);
2345 		ioc->enabled = true;
2346 	} else {
2347 		blk_queue_flag_clear(QUEUE_FLAG_RQ_ALLOC_TIME, ioc->rqos.q);
2348 		ioc->enabled = false;
2349 	}
2350 
2351 	if (user) {
2352 		memcpy(ioc->params.qos, qos, sizeof(qos));
2353 		ioc->user_qos_params = true;
2354 	} else {
2355 		ioc->user_qos_params = false;
2356 	}
2357 
2358 	ioc_refresh_params(ioc, true);
2359 	spin_unlock_irq(&ioc->lock);
2360 
2361 	put_disk_and_module(disk);
2362 	return nbytes;
2363 einval:
2364 	ret = -EINVAL;
2365 err:
2366 	put_disk_and_module(disk);
2367 	return ret;
2368 }
2369 
2370 static u64 ioc_cost_model_prfill(struct seq_file *sf,
2371 				 struct blkg_policy_data *pd, int off)
2372 {
2373 	const char *dname = blkg_dev_name(pd->blkg);
2374 	struct ioc *ioc = pd_to_iocg(pd)->ioc;
2375 	u64 *u = ioc->params.i_lcoefs;
2376 
2377 	if (!dname)
2378 		return 0;
2379 
2380 	seq_printf(sf, "%s ctrl=%s model=linear "
2381 		   "rbps=%llu rseqiops=%llu rrandiops=%llu "
2382 		   "wbps=%llu wseqiops=%llu wrandiops=%llu\n",
2383 		   dname, ioc->user_cost_model ? "user" : "auto",
2384 		   u[I_LCOEF_RBPS], u[I_LCOEF_RSEQIOPS], u[I_LCOEF_RRANDIOPS],
2385 		   u[I_LCOEF_WBPS], u[I_LCOEF_WSEQIOPS], u[I_LCOEF_WRANDIOPS]);
2386 	return 0;
2387 }
2388 
2389 static int ioc_cost_model_show(struct seq_file *sf, void *v)
2390 {
2391 	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
2392 
2393 	blkcg_print_blkgs(sf, blkcg, ioc_cost_model_prfill,
2394 			  &blkcg_policy_iocost, seq_cft(sf)->private, false);
2395 	return 0;
2396 }
2397 
2398 static const match_table_t cost_ctrl_tokens = {
2399 	{ COST_CTRL,		"ctrl=%s"	},
2400 	{ COST_MODEL,		"model=%s"	},
2401 	{ NR_COST_CTRL_PARAMS,	NULL		},
2402 };
2403 
2404 static const match_table_t i_lcoef_tokens = {
2405 	{ I_LCOEF_RBPS,		"rbps=%u"	},
2406 	{ I_LCOEF_RSEQIOPS,	"rseqiops=%u"	},
2407 	{ I_LCOEF_RRANDIOPS,	"rrandiops=%u"	},
2408 	{ I_LCOEF_WBPS,		"wbps=%u"	},
2409 	{ I_LCOEF_WSEQIOPS,	"wseqiops=%u"	},
2410 	{ I_LCOEF_WRANDIOPS,	"wrandiops=%u"	},
2411 	{ NR_I_LCOEFS,		NULL		},
2412 };
2413 
2414 static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input,
2415 				    size_t nbytes, loff_t off)
2416 {
2417 	struct gendisk *disk;
2418 	struct ioc *ioc;
2419 	u64 u[NR_I_LCOEFS];
2420 	bool user;
2421 	char *p;
2422 	int ret;
2423 
2424 	disk = blkcg_conf_get_disk(&input);
2425 	if (IS_ERR(disk))
2426 		return PTR_ERR(disk);
2427 
2428 	ioc = q_to_ioc(disk->queue);
2429 	if (!ioc) {
2430 		ret = blk_iocost_init(disk->queue);
2431 		if (ret)
2432 			goto err;
2433 		ioc = q_to_ioc(disk->queue);
2434 	}
2435 
2436 	spin_lock_irq(&ioc->lock);
2437 	memcpy(u, ioc->params.i_lcoefs, sizeof(u));
2438 	user = ioc->user_cost_model;
2439 	spin_unlock_irq(&ioc->lock);
2440 
2441 	while ((p = strsep(&input, " \t\n"))) {
2442 		substring_t args[MAX_OPT_ARGS];
2443 		char buf[32];
2444 		int tok;
2445 		u64 v;
2446 
2447 		if (!*p)
2448 			continue;
2449 
2450 		switch (match_token(p, cost_ctrl_tokens, args)) {
2451 		case COST_CTRL:
2452 			match_strlcpy(buf, &args[0], sizeof(buf));
2453 			if (!strcmp(buf, "auto"))
2454 				user = false;
2455 			else if (!strcmp(buf, "user"))
2456 				user = true;
2457 			else
2458 				goto einval;
2459 			continue;
2460 		case COST_MODEL:
2461 			match_strlcpy(buf, &args[0], sizeof(buf));
2462 			if (strcmp(buf, "linear"))
2463 				goto einval;
2464 			continue;
2465 		}
2466 
2467 		tok = match_token(p, i_lcoef_tokens, args);
2468 		if (tok == NR_I_LCOEFS)
2469 			goto einval;
2470 		if (match_u64(&args[0], &v))
2471 			goto einval;
2472 		u[tok] = v;
2473 		user = true;
2474 	}
2475 
2476 	spin_lock_irq(&ioc->lock);
2477 	if (user) {
2478 		memcpy(ioc->params.i_lcoefs, u, sizeof(u));
2479 		ioc->user_cost_model = true;
2480 	} else {
2481 		ioc->user_cost_model = false;
2482 	}
2483 	ioc_refresh_params(ioc, true);
2484 	spin_unlock_irq(&ioc->lock);
2485 
2486 	put_disk_and_module(disk);
2487 	return nbytes;
2488 
2489 einval:
2490 	ret = -EINVAL;
2491 err:
2492 	put_disk_and_module(disk);
2493 	return ret;
2494 }
2495 
2496 static struct cftype ioc_files[] = {
2497 	{
2498 		.name = "weight",
2499 		.flags = CFTYPE_NOT_ON_ROOT,
2500 		.seq_show = ioc_weight_show,
2501 		.write = ioc_weight_write,
2502 	},
2503 	{
2504 		.name = "cost.qos",
2505 		.flags = CFTYPE_ONLY_ON_ROOT,
2506 		.seq_show = ioc_qos_show,
2507 		.write = ioc_qos_write,
2508 	},
2509 	{
2510 		.name = "cost.model",
2511 		.flags = CFTYPE_ONLY_ON_ROOT,
2512 		.seq_show = ioc_cost_model_show,
2513 		.write = ioc_cost_model_write,
2514 	},
2515 	{}
2516 };
2517 
2518 static struct blkcg_policy blkcg_policy_iocost = {
2519 	.dfl_cftypes	= ioc_files,
2520 	.cpd_alloc_fn	= ioc_cpd_alloc,
2521 	.cpd_free_fn	= ioc_cpd_free,
2522 	.pd_alloc_fn	= ioc_pd_alloc,
2523 	.pd_init_fn	= ioc_pd_init,
2524 	.pd_free_fn	= ioc_pd_free,
2525 };
2526 
2527 static int __init ioc_init(void)
2528 {
2529 	return blkcg_policy_register(&blkcg_policy_iocost);
2530 }
2531 
2532 static void __exit ioc_exit(void)
2533 {
2534 	return blkcg_policy_unregister(&blkcg_policy_iocost);
2535 }
2536 
2537 module_init(ioc_init);
2538 module_exit(ioc_exit);
2539