Commit 9195291e5f05e01d67f9a09c756b8aca8f009089 added calls to sched_clock() from preemptible code. sched_clock() is both the wrong interface AND cannot be called without preempt disabled. Apply a temporary fix to get rid of the warnings, a real patch is in the works.
Showing the changes to include/linux/blkdev.h (1 of 1 file). Show all
Unified · Split
| @@ -1211,14 +1211,23 @@ struct work_struct; · 1210 unmodified lines | |||
| 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1212 | 1212 | ||
| 1213 | #ifdef CONFIG_BLK_CGROUP | 1213 | #ifdef CONFIG_BLK_CGROUP |
| 1214 | /* | ||
| 1215 | * This should not be using sched_clock(). A real patch is in progress | ||
| 1216 | * to fix this up, until that is in place we need to disable preemption | ||
| 1217 | * around sched_clock() in this function and set_io_start_time_ns(). | ||
| 1218 | */ | ||
| 1214 | static inline void set_start_time_ns(struct request *req) | 1219 | static inline void set_start_time_ns(struct request *req) |
| 1215 | { | 1220 | { |
| 1221 | preempt_disable(); | ||
| 1216 | req->start_time_ns = sched_clock(); | 1222 | req->start_time_ns = sched_clock(); |
| 1223 | preempt_enable(); | ||
| 1217 | } | 1224 | } |
| 1218 | 1225 | ||
| 1219 | static inline void set_io_start_time_ns(struct request *req) | 1226 | static inline void set_io_start_time_ns(struct request *req) |
| 1220 | { | 1227 | { |
| 1228 | preempt_disable(); | ||
| 1221 | req->io_start_time_ns = sched_clock(); | 1229 | req->io_start_time_ns = sched_clock(); |
| 1230 | preempt_enable(); | ||
| 1222 | } | 1231 | } |
| 1223 | 1232 | ||
| 1224 | static inline uint64_t rq_start_time_ns(struct request *req) | 1233 | static inline uint64_t rq_start_time_ns(struct request *req) |