* @state:     state information (See bit values above)
  * @is_rel:    Set if the timer was armed relative
  * @is_soft:   Set if hrtimer will be expired in soft interrupt context.
+ * @is_hard:   Set if hrtimer will be expired in hard interrupt context
+ *             even on RT.
  *
  * The hrtimer structure must be initialized by hrtimer_init()
  */
        u8                              state;
        u8                              is_rel;
        u8                              is_soft;
+       u8                              is_hard;
 };
 
 /**
 
 
        /*
         * Check whether the HRTIMER_MODE_SOFT bit and hrtimer.is_soft
-        * match.
+        * match on CONFIG_PREEMPT_RT = n. With PREEMPT_RT check the hard
+        * expiry mode because unmarked timers are moved to softirq expiry.
         */
-       WARN_ON_ONCE(!(mode & HRTIMER_MODE_SOFT) ^ !timer->is_soft);
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+               WARN_ON_ONCE(!(mode & HRTIMER_MODE_SOFT) ^ !timer->is_soft);
+       else
+               WARN_ON_ONCE(!(mode & HRTIMER_MODE_HARD) ^ !timer->is_hard);
 
        base = lock_hrtimer_base(timer, &flags);
 
 
        base += hrtimer_clockid_to_base(clock_id);
        timer->is_soft = softtimer;
+       timer->is_hard = !softtimer;
        timer->base = &cpu_base->clock_base[base];
        timerqueue_init(&timer->node);
 }