Re: [PATCH V4 2/2] rcu: Update jiffies in rcu_cpu_stall_reset()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Aug 17 2023 at 16:06, Huacai Chen wrote:
> On Thu, Aug 17, 2023 at 3:27 AM Joel Fernandes <joel@xxxxxxxxxxxxxxxxx> wrote:
>> > If  do_update_jiffies_64() cannot be used in NMI context,
>>
>> Can you not make the jiffies update conditional on whether it is
>> called within NMI context?

Which solves what? If KGDB has a breakpoint in the jiffies lock held
region then you still dead lock.

>> I dislike that..
> Is this acceptable?
>
> void rcu_cpu_stall_reset(void)
> {
>         unsigned long delta;
>
>         delta = nsecs_to_jiffies(ktime_get_ns() - ktime_get_coarse_ns());
>
>         WRITE_ONCE(rcu_state.jiffies_stall,
>                    jiffies + delta + rcu_jiffies_till_stall_check());
> }
>
> This can update jiffies_stall without updating jiffies (but has the
> same effect).

Now you traded the potential dead lock on jiffies lock for a potential
live lock vs. tk_core.seq. Not really an improvement, right?

The only way you can do the above is something like the incomplete and
uncompiled below. NMI safe and therefore livelock proof time interfaces
exist for a reason.

Thanks,

        tglx
---
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -51,6 +51,13 @@ struct tick_sched *tick_get_tick_sched(i
  */
 static ktime_t last_jiffies_update;
 
+unsigned long tick_estimate_stale_jiffies(void)
+{
+	ktime_t delta = ktime_get_mono_fast_ns() - READ_ONCE(last_jiffies_update);
+
+	return delta < 0 ? 0 : div_s64(delta, TICK_NSEC);
+}
+
 /*
  * Must be called with interrupts disabled !
  */






[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux