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 ---