time.c (a3251c1a36f595046bea03935ebe37a1e1f1f1d7) | time.c (c8177aba37cac6b6dd0e5511fde9fc2d9e7f2f38) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2015 Anton Ivanov (aivanov@{brocade.com,kot-begemot.co.uk}) 4 * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de) 5 * Copyright (C) 2012-2014 Cisco Systems 6 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 7 * Copyright (C) 2019 Intel Corporation 8 */ --- 264 unchanged lines hidden (view full) --- 273 list); 274} 275 276static void __time_travel_add_event(struct time_travel_event *e, 277 unsigned long long time) 278{ 279 struct time_travel_event *tmp; 280 bool inserted = false; | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2015 Anton Ivanov (aivanov@{brocade.com,kot-begemot.co.uk}) 4 * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de) 5 * Copyright (C) 2012-2014 Cisco Systems 6 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 7 * Copyright (C) 2019 Intel Corporation 8 */ --- 264 unchanged lines hidden (view full) --- 273 list); 274} 275 276static void __time_travel_add_event(struct time_travel_event *e, 277 unsigned long long time) 278{ 279 struct time_travel_event *tmp; 280 bool inserted = false; |
281 unsigned long flags; |
|
281 282 if (e->pending) 283 return; 284 285 e->pending = true; 286 e->time = time; 287 | 282 283 if (e->pending) 284 return; 285 286 e->pending = true; 287 e->time = time; 288 |
289 local_irq_save(flags); |
|
288 list_for_each_entry(tmp, &time_travel_events, list) { 289 /* 290 * Add the new entry before one with higher time, 291 * or if they're equal and both on stack, because 292 * in that case we need to unwind the stack in the 293 * right order, and the later event (timer sleep 294 * or such) must be dequeued first. 295 */ --- 6 unchanged lines hidden (view full) --- 302 } 303 304 if (!inserted) 305 list_add_tail(&e->list, &time_travel_events); 306 307 tmp = time_travel_first_event(); 308 time_travel_ext_update_request(tmp->time); 309 time_travel_next_event = tmp->time; | 290 list_for_each_entry(tmp, &time_travel_events, list) { 291 /* 292 * Add the new entry before one with higher time, 293 * or if they're equal and both on stack, because 294 * in that case we need to unwind the stack in the 295 * right order, and the later event (timer sleep 296 * or such) must be dequeued first. 297 */ --- 6 unchanged lines hidden (view full) --- 304 } 305 306 if (!inserted) 307 list_add_tail(&e->list, &time_travel_events); 308 309 tmp = time_travel_first_event(); 310 time_travel_ext_update_request(tmp->time); 311 time_travel_next_event = tmp->time; |
312 local_irq_restore(flags); |
|
310} 311 312static void time_travel_add_event(struct time_travel_event *e, 313 unsigned long long time) 314{ 315 if (WARN_ON(!e->fn)) 316 return; 317 --- 60 unchanged lines hidden (view full) --- 378 e->fn(e); 379 irq_exit(); 380 local_irq_restore(flags); 381 } 382} 383 384static bool time_travel_del_event(struct time_travel_event *e) 385{ | 313} 314 315static void time_travel_add_event(struct time_travel_event *e, 316 unsigned long long time) 317{ 318 if (WARN_ON(!e->fn)) 319 return; 320 --- 60 unchanged lines hidden (view full) --- 381 e->fn(e); 382 irq_exit(); 383 local_irq_restore(flags); 384 } 385} 386 387static bool time_travel_del_event(struct time_travel_event *e) 388{ |
389 unsigned long flags; 390 |
|
386 if (!e->pending) 387 return false; | 391 if (!e->pending) 392 return false; |
393 local_irq_save(flags); |
|
388 list_del(&e->list); 389 e->pending = false; | 394 list_del(&e->list); 395 e->pending = false; |
396 local_irq_restore(flags); |
|
390 return true; 391} 392 393static void time_travel_update_time(unsigned long long next, bool idle) 394{ 395 struct time_travel_event ne = { 396 .onstack = true, 397 }; --- 459 unchanged lines hidden --- | 397 return true; 398} 399 400static void time_travel_update_time(unsigned long long next, bool idle) 401{ 402 struct time_travel_event ne = { 403 .onstack = true, 404 }; --- 459 unchanged lines hidden --- |