When CPU hotplugging is enabled, the user may want to remove the
current CPU which is providing the timer ticks. If this happens
we need to find a new timesync master.
Signed-off-by: Helge Deller <deller@gmx.de>
 
 extern struct system_cpuinfo_parisc boot_cpu_data;
 DECLARE_PER_CPU(struct cpuinfo_parisc, cpu_data);
+extern int time_keeper_id;             /* CPU used for timekeeping */
 
 #define CPU_HVERSION ((boot_cpu_data.hversion >> 4) & 0x0FFF)
 
 
         */
        set_cpu_online(cpu, false);
 
+       /* Find a new timesync master */
+       if (cpu == time_keeper_id) {
+               time_keeper_id = cpumask_first(cpu_online_mask);
+               pr_info("CPU %d is now promoted to time-keeper master\n", time_keeper_id);
+       }
+
        disable_percpu_irq(IPI_IRQ);
 
        irq_migrate_all_off_this_cpu();
 
 
 #include <linux/timex.h>
 
+int time_keeper_id __read_mostly;      /* CPU used for timekeeping. */
+
 static unsigned long clocktick __ro_after_init;        /* timer cycles per tick */
 
 /*
        cpuinfo->it_value = next_tick;
 
        /* Go do system house keeping. */
-       if (cpu != 0)
+       if (IS_ENABLED(CONFIG_SMP) && (cpu != time_keeper_id))
                ticks_elapsed = 0;
        legacy_timer_tick(ticks_elapsed);