+// The timer API introduced in Linux 4.14.0 includes a from_timer() macro built
+// atop the container_of() macro. As the kernel moves away from using
+// timer_list.data, it quasi-assumes that the timer_list struct will be
+// contained in some larger struct that also contains the data, hence this
+// softlockup_wrapper struct since it allows us to avoid any serious code
+// changes to the driver.
+struct softlockup_wrapper {
+ struct timer_list timer;
+ unsigned long timer_fired;
+};
+