Changeset 3118355 in mainline for kernel/generic/src/proc/scheduler.c
- Timestamp:
- 2023-03-21T17:41:48Z (21 months ago)
- Branches:
- master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c680333
- Parents:
- 72ac106
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2023-02-26 17:56:29)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2023-03-21 17:41:48)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/scheduler.c
r72ac106 r3118355 275 275 CPU->relink_deadline = CPU->current_clock_tick + NEEDS_RELINK_MAX; 276 276 277 /* Temporary cache for lists we are moving. */ 277 278 list_t list; 278 279 list_initialize(&list); 279 280 281 size_t n = 0; 282 280 283 irq_spinlock_lock(&CPU->lock, false); 281 284 282 for (int i = start; i < RQ_COUNT - 1; i++) { 283 /* Remember and empty rq[i + 1] */ 284 285 irq_spinlock_lock(&CPU->rq[i + 1].lock, false); 286 list_concat(&list, &CPU->rq[i + 1].rq); 287 size_t n = CPU->rq[i + 1].n; 288 CPU->rq[i + 1].n = 0; 289 irq_spinlock_unlock(&CPU->rq[i + 1].lock, false); 290 291 /* Append rq[i + 1] to rq[i] */ 292 285 /* Move every list (except the one with highest priority) one level up. */ 286 for (int i = RQ_COUNT - 1; i > start; i--) { 293 287 irq_spinlock_lock(&CPU->rq[i].lock, false); 294 list_concat(&CPU->rq[i].rq, &list); 295 CPU->rq[i].n += n; 288 289 /* Swap lists. */ 290 list_swap(&CPU->rq[i].rq, &list); 291 292 /* Swap number of items. */ 293 size_t tmpn = CPU->rq[i].n; 294 CPU->rq[i].n = n; 295 n = tmpn; 296 296 297 irq_spinlock_unlock(&CPU->rq[i].lock, false); 298 } 299 300 /* Append the contents of rq[start + 1] to rq[start]. */ 301 if (n != 0) { 302 irq_spinlock_lock(&CPU->rq[start].lock, false); 303 list_concat(&CPU->rq[start].rq, &list); 304 CPU->rq[start].n += n; 305 irq_spinlock_unlock(&CPU->rq[start].lock, false); 297 306 } 298 307
Note:
See TracChangeset
for help on using the changeset viewer.