|
@@ -1202,6 +1202,24 @@ static unsigned int bfq_wr_duration(struct bfq_data *bfqd)
|
|
return dur;
|
|
return dur;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Return the farthest future time instant according to jiffies
|
|
|
|
+ * macros.
|
|
|
|
+ */
|
|
|
|
+static unsigned long bfq_greatest_from_now(void)
|
|
|
|
+{
|
|
|
|
+ return jiffies + MAX_JIFFY_OFFSET;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Return the farthest past time instant according to jiffies
|
|
|
|
+ * macros.
|
|
|
|
+ */
|
|
|
|
+static unsigned long bfq_smallest_from_now(void)
|
|
|
|
+{
|
|
|
|
+ return jiffies - MAX_JIFFY_OFFSET;
|
|
|
|
+}
|
|
|
|
+
|
|
static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
|
static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
|
struct bfq_queue *bfqq,
|
|
struct bfq_queue *bfqq,
|
|
unsigned int old_wr_coeff,
|
|
unsigned int old_wr_coeff,
|
|
@@ -1216,7 +1234,19 @@ static void bfq_update_bfqq_wr_on_rq_arrival(struct bfq_data *bfqd,
|
|
bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
|
bfqq->wr_coeff = bfqd->bfq_wr_coeff;
|
|
bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
|
bfqq->wr_cur_max_time = bfq_wr_duration(bfqd);
|
|
} else {
|
|
} else {
|
|
- bfqq->wr_start_at_switch_to_srt = jiffies;
|
|
|
|
|
|
+ /*
|
|
|
|
+ * No interactive weight raising in progress
|
|
|
|
+ * here: assign minus infinity to
|
|
|
|
+ * wr_start_at_switch_to_srt, to make sure
|
|
|
|
+ * that, at the end of the soft-real-time
|
|
|
|
+ * weight raising periods that is starting
|
|
|
|
+ * now, no interactive weight-raising period
|
|
|
|
+ * may be wrongly considered as still in
|
|
|
|
+ * progress (and thus actually started by
|
|
|
|
+ * mistake).
|
|
|
|
+ */
|
|
|
|
+ bfqq->wr_start_at_switch_to_srt =
|
|
|
|
+ bfq_smallest_from_now();
|
|
bfqq->wr_coeff = bfqd->bfq_wr_coeff *
|
|
bfqq->wr_coeff = bfqd->bfq_wr_coeff *
|
|
BFQ_SOFTRT_WEIGHT_FACTOR;
|
|
BFQ_SOFTRT_WEIGHT_FACTOR;
|
|
bfqq->wr_cur_max_time =
|
|
bfqq->wr_cur_max_time =
|
|
@@ -2897,24 +2927,6 @@ static unsigned long bfq_bfqq_softrt_next_start(struct bfq_data *bfqd,
|
|
jiffies + nsecs_to_jiffies(bfqq->bfqd->bfq_slice_idle) + 4);
|
|
jiffies + nsecs_to_jiffies(bfqq->bfqd->bfq_slice_idle) + 4);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Return the farthest future time instant according to jiffies
|
|
|
|
- * macros.
|
|
|
|
- */
|
|
|
|
-static unsigned long bfq_greatest_from_now(void)
|
|
|
|
-{
|
|
|
|
- return jiffies + MAX_JIFFY_OFFSET;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * Return the farthest past time instant according to jiffies
|
|
|
|
- * macros.
|
|
|
|
- */
|
|
|
|
-static unsigned long bfq_smallest_from_now(void)
|
|
|
|
-{
|
|
|
|
- return jiffies - MAX_JIFFY_OFFSET;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* bfq_bfqq_expire - expire a queue.
|
|
* bfq_bfqq_expire - expire a queue.
|
|
* @bfqd: device owning the queue.
|
|
* @bfqd: device owning the queue.
|