Revert "soc: qcom: Also dump watchdog data in bite cases"

This reverts commit 5f250a3f69b949eefec8a1062b3d64a32088047a.

Change-Id: I7cc97556c79dc85f0152092c6cdb175a2d48daa6
Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
Richard Raya 2024-09-08 20:45:31 -03:00
parent 8f25c15578
commit bfdaa3af2f

View File

@ -93,7 +93,6 @@ struct msm_watchdog_data {
struct task_struct *watchdog_task;
struct timer_list pet_timer;
struct timer_list pet_observer;
wait_queue_head_t pet_complete;
bool timer_expired;
@ -229,7 +228,6 @@ static void wdog_disable(struct msm_watchdog_data *wdog_dd)
smp_mb();
atomic_notifier_chain_unregister(&panic_notifier_list,
&wdog_dd->panic_blk);
del_timer_sync(&wdog_dd->pet_observer);
del_timer_sync(&wdog_dd->pet_timer);
/* may be suspended after the first write above */
__raw_writel(0, wdog_dd->base + WDT0_EN);
@ -359,9 +357,12 @@ static ssize_t wdog_pet_time_get(struct device *dev,
static DEVICE_ATTR(pet_time, 0400, wdog_pet_time_get, NULL);
static int get_wdog_sts(struct msm_watchdog_data *wdog_dd)
static void pet_watchdog(struct msm_watchdog_data *wdog_dd)
{
int i, count, prev_count = 0;
int slack, i, count, prev_count = 0;
unsigned long long time_ns;
unsigned long long slack_ns;
unsigned long long bark_time_ns = wdog_dd->bark_time * 1000000ULL;
for (i = 0; i < 2; i++) {
count = (__raw_readl(wdog_dd->base + WDT0_STS) >> 1) & 0xFFFFF;
@ -370,18 +371,6 @@ static int get_wdog_sts(struct msm_watchdog_data *wdog_dd)
i = 0;
}
}
return count;
}
static void pet_watchdog(struct msm_watchdog_data *wdog_dd)
{
int slack, count;
unsigned long long time_ns;
unsigned long long slack_ns;
unsigned long long bark_time_ns = wdog_dd->bark_time * 1000000ULL;
count = get_wdog_sts(wdog_dd);
slack = ((wdog_dd->bark_time * WDT_HZ) / 1000) - count;
if (slack < wdog_dd->min_slack_ticks)
wdog_dd->min_slack_ticks = slack;
@ -424,30 +413,6 @@ static void ping_other_cpus(struct msm_watchdog_data *wdog_dd)
}
}
/* Set pet observer to expire 1 second before watchdog bite */
#define PET_OBSERVER_OFFSET_SECS (WDOG_BITE_OFFSET_IN_SECONDS - 1)
static void print_wdog_data(struct msm_watchdog_data *wdog_dd);
static void pet_observer_fn(unsigned long data)
{
struct msm_watchdog_data *wdog_dd =
(struct msm_watchdog_data *)data;
int wdog_counter = get_wdog_sts(wdog_dd) / WDT_HZ;
int observer_threshold = ((wdog_dd->bark_time / 1000) +
PET_OBSERVER_OFFSET_SECS);
if (wdog_counter < observer_threshold)
mod_timer(&wdog_dd->pet_observer, jiffies + msecs_to_jiffies(
(observer_threshold - wdog_counter) * 1000));
else {
pr_warn("MSM watchdog blocked for %d seconds\n", wdog_counter);
pr_warn("Print watchdog data:\n");
print_wdog_data(wdog_dd);
pr_warn("Watchdog will bite in 1 second.\n");
}
}
static void pet_task_wakeup(unsigned long data)
{
struct msm_watchdog_data *wdog_dd =
@ -540,7 +505,6 @@ static int msm_watchdog_remove(struct platform_device *pdev)
if (wdog_dd->irq_ppi)
free_percpu(wdog_dd->wdog_cpu_dd);
dev_info(wdog_dd->dev, "MSM Watchdog Exit - Deactivated\n");
del_timer_sync(&wdog_dd->pet_observer);
del_timer_sync(&wdog_dd->pet_timer);
kthread_stop(wdog_dd->watchdog_task);
kfree(wdog_dd);
@ -567,18 +531,22 @@ void msm_trigger_wdog_bite(void)
__raw_readl(wdog_data->base + WDT0_BITE_TIME));
}
static void print_wdog_data(struct msm_watchdog_data *wdog_dd)
static irqreturn_t wdog_bark_handler(int irq, void *dev_id)
{
unsigned long long last_pet;
struct msm_watchdog_data *wdog_dd = (struct msm_watchdog_data *)dev_id;
unsigned long nanosec_rem;
unsigned long long t = sched_clock();
struct task_struct *wdog_task;
int cpu;
struct cpumask *bark_affinity;
last_pet = wdog_dd->last_pet;
nanosec_rem = do_div(last_pet, 1000000000);
nanosec_rem = do_div(t, 1000000000);
dev_info(wdog_dd->dev, "Watchdog bark! Now = %lu.%06lu\n",
(unsigned long) t, nanosec_rem / 1000);
nanosec_rem = do_div(wdog_dd->last_pet, 1000000000);
dev_info(wdog_dd->dev, "Watchdog last pet at %lu.%06lu\n",
(unsigned long) last_pet, nanosec_rem / 1000);
(unsigned long) wdog_dd->last_pet, nanosec_rem / 1000);
if (wdog_dd->do_ipi_ping)
dump_cpu_alive_mask(wdog_dd);
@ -623,20 +591,7 @@ static void print_wdog_data(struct msm_watchdog_data *wdog_dd)
/* Print watchdog bark IRQ affinity mask */
bark_affinity = irq_get_affinity_mask(wdog_dd->bark_irq);
dev_info(wdog_dd->dev, "Watchdog bark IRQ %d CPU affinity: %*pbl\n",
wdog_dd->bark_irq, cpumask_pr_args(bark_affinity));
}
static irqreturn_t wdog_bark_handler(int irq, void *dev_id)
{
struct msm_watchdog_data *wdog_dd = (struct msm_watchdog_data *)dev_id;
unsigned long nanosec_rem;
unsigned long long t = sched_clock();
nanosec_rem = do_div(t, 1000000000);
dev_info(wdog_dd->dev, "Watchdog bark! Now = %lu.%06lu\n",
(unsigned long) t, nanosec_rem / 1000);
print_wdog_data(wdog_dd);
irq, cpumask_pr_args(bark_affinity));
msm_trigger_wdog_bite();
panic("Failed to cause a watchdog bite! - Falling back to kernel panic!");
@ -876,13 +831,6 @@ static void init_watchdog_data(struct msm_watchdog_data *wdog_dd)
if (!ipi_en)
cpu_pm_register_notifier(&wdog_cpu_pm_nb);
dev_info(wdog_dd->dev, "MSM Watchdog Initialized\n");
init_timer(&wdog_dd->pet_observer);
wdog_dd->pet_observer.data = (unsigned long)wdog_dd;
wdog_dd->pet_observer.function = pet_observer_fn;
wdog_dd->pet_observer.expires = msecs_to_jiffies(wdog_dd->bark_time +
PET_OBSERVER_OFFSET_SECS);
add_timer(&wdog_dd->pet_observer);
}
static const struct of_device_id msm_wdog_match_table[] = {