For some tests it would be important to check that an IRQ was *not*
triggered, for instance to test certain masking operations.

Extend the check_added() function to recognise an empty cpumask to
detect this situation. The timeout duration is reduced, and the "no IRQs
triggered" case is actually reported as a success in this case.

Signed-off-by: Andre Przywara <[email protected]>
---
 arm/gic.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/arm/gic.c b/arm/gic.c
index a114009..eca9188 100644
--- a/arm/gic.c
+++ b/arm/gic.c
@@ -66,9 +66,10 @@ static void check_acked(const char *testname, cpumask_t 
*mask)
        int missing = 0, extra = 0, unexpected = 0;
        int nr_pass, cpu, i;
        bool bad = false;
+       bool noirqs = cpumask_empty(mask);
 
        /* Wait up to 5s for all interrupts to be delivered */
-       for (i = 0; i < 50; ++i) {
+       for (i = 0; i < (noirqs ? 15 : 50); ++i) {
                mdelay(100);
                nr_pass = 0;
                for_each_present_cpu(cpu) {
@@ -88,7 +89,7 @@ static void check_acked(const char *testname, cpumask_t *mask)
                                bad = true;
                        }
                }
-               if (nr_pass == nr_cpus) {
+               if (!noirqs && nr_pass == nr_cpus) {
                        report("%s", !bad, testname);
                        if (i)
                                report_info("took more than %d ms", i * 100);
@@ -96,6 +97,11 @@ static void check_acked(const char *testname, cpumask_t 
*mask)
                }
        }
 
+       if (noirqs && nr_pass == nr_cpus) {
+               report("%s", !bad, testname);
+               return;
+       }
+
        for_each_present_cpu(cpu) {
                if (cpumask_test_cpu(cpu, mask)) {
                        if (!acked[cpu])
-- 
2.17.1

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to