X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=kernel%2Firq%2Ftimings.c;h=1f981162648a3d5c4e5e0ab735127b1376d743b5;hb=refs%2Fheads%2Faccepted%2Ftizen_7.0_unified;hp=773b6105c4aea2843afb3f49313e4dff768af1c0;hpb=0613ed91901b5f87afcd28b4560fb0aa37a0db13;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/kernel/irq/timings.c b/kernel/irq/timings.c index 773b610..1f98116 100644 --- a/kernel/irq/timings.c +++ b/kernel/irq/timings.c @@ -453,6 +453,11 @@ static __always_inline void __irq_timings_store(int irq, struct irqt_stat *irqs, */ index = irq_timings_interval_index(interval); + if (index > PREDICTION_BUFFER_SIZE - 1) { + irqs->count = 0; + return; + } + /* * Store the index as an element of the pattern in another * circular array. @@ -794,12 +799,14 @@ static int __init irq_timings_test_irqs(struct timings_intervals *ti) __irq_timings_store(irq, irqs, ti->intervals[i]); if (irqs->circ_timings[i & IRQ_TIMINGS_MASK] != index) { + ret = -EBADSLT; pr_err("Failed to store in the circular buffer\n"); goto out; } } if (irqs->count != ti->count) { + ret = -ERANGE; pr_err("Count differs\n"); goto out; }