From 20c5c4f47dc92ccc67655a9c52f879bbf79a34da Mon Sep 17 00:00:00 2001 From: yinshengkai Date: Sun, 23 Apr 2023 10:35:13 +0800 Subject: [PATCH] sched/irq: optimizing IRQMONITOR, move up_perf_convert to irq_procfs Signed-off-by: yinshengkai --- sched/irq/irq_dispatch.c | 6 ++---- sched/irq/irq_procfs.c | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sched/irq/irq_dispatch.c b/sched/irq/irq_dispatch.c index c705a0d060..baa314deb7 100644 --- a/sched/irq/irq_dispatch.c +++ b/sched/irq/irq_dispatch.c @@ -80,19 +80,17 @@ # define CALL_VECTOR(ndx, vector, irq, context, arg) \ do \ { \ - struct timespec delta; \ unsigned long start; \ unsigned long elapsed; \ start = up_perf_gettime(); \ vector(irq, context, arg); \ elapsed = up_perf_gettime() - start; \ - up_perf_convert(elapsed, &delta); \ if (ndx < NUSER_IRQS) \ { \ INCR_COUNT(ndx); \ - if (delta.tv_nsec > g_irqvector[ndx].time) \ + if (elapsed > g_irqvector[ndx].time) \ { \ - g_irqvector[ndx].time = delta.tv_nsec; \ + g_irqvector[ndx].time = elapsed; \ } \ } \ if (CONFIG_SCHED_CRITMONITOR_MAXTIME_IRQ > 0 && \ diff --git a/sched/irq/irq_procfs.c b/sched/irq/irq_procfs.c index 221b6018ca..e22a773e1b 100644 --- a/sched/irq/irq_procfs.c +++ b/sched/irq/irq_procfs.c @@ -143,6 +143,7 @@ static int irq_callback(int irq, FAR struct irq_info_s *info, { FAR struct irq_file_s *irqfile = (FAR struct irq_file_s *)arg; struct irq_info_s copy; + struct timespec delta; irqstate_t flags; clock_t elapsed; clock_t now; @@ -200,6 +201,7 @@ static int irq_callback(int irq, FAR struct irq_info_s *info, */ elapsed = now - copy.start; + up_perf_convert(copy.time, &delta); #ifdef CONFIG_HAVE_LONG_LONG /* elapsed = - , units=clock ticks @@ -241,7 +243,7 @@ static int irq_callback(int irq, FAR struct irq_info_s *info, (unsigned long)((uintptr_t)copy.handler), (unsigned long)((uintptr_t)copy.arg), count, intpart, fracpart, - (unsigned long)copy.time / 1000); + (unsigned long)delta.tv_nsec / 1000); copysize = procfs_memcpy(irqfile->line, linesize, irqfile->buffer, irqfile->remaining, &irqfile->offset);