From: Tiago Muck Date: Fri, 8 Sep 2017 17:24:42 +0000 (-0500) Subject: sim: ScopedMigration does nothing if both eqs are the same X-Git-Tag: v19.0.0.0~2549 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1033838e11ad02c4637055cf2438b4b90c5ad2a5;p=gem5.git sim: ScopedMigration does nothing if both eqs are the same Added a check to avoid unlocking/locking the same event queue. Also, added an optional parameter to enable the migration to be skipped. This can be useful to disable the synchronization for certain runtime conditions. Change-Id: I4b03b3ffff4f9503153cd41dd8aa78705bf16cc4 Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/5730 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index 6d68b4e3a..0a0405fef 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -542,28 +542,36 @@ class EventQueue * example, be useful when performing IO across thread event * queues when timing is not crucial (e.g., during fast * forwarding). + * + * ScopedMigration does nothing if both eqs are the same */ class ScopedMigration { public: - ScopedMigration(EventQueue *_new_eq) - : new_eq(*_new_eq), old_eq(*curEventQueue()) + ScopedMigration(EventQueue *_new_eq, bool _doMigrate = true) + :new_eq(*_new_eq), old_eq(*curEventQueue()), + doMigrate((&new_eq != &old_eq)&&_doMigrate) { - old_eq.unlock(); - new_eq.lock(); - curEventQueue(&new_eq); + if (doMigrate){ + old_eq.unlock(); + new_eq.lock(); + curEventQueue(&new_eq); + } } ~ScopedMigration() { - new_eq.unlock(); - old_eq.lock(); - curEventQueue(&old_eq); + if (doMigrate){ + new_eq.unlock(); + old_eq.lock(); + curEventQueue(&old_eq); + } } private: EventQueue &new_eq; EventQueue &old_eq; + bool doMigrate; }; /**