From 7a2950098feeaa952ea1a142971fc157f4159112 Mon Sep 17 00:00:00 2001 From: Wendy Liang Date: Fri, 9 Nov 2018 13:23:01 -0800 Subject: [PATCH] test: update irq test for irq registration API change The IRQ registration API has been updated to support single handler per IRQ. The IRQ test is updated for this change. Signed-off-by: Wendy Liang --- test/system/freertos/irq.c | 178 +++++-------------------------------- test/system/generic/irq.c | 178 +++++-------------------------------- test/system/linux/irq.c | 174 ++++++------------------------------ test/system/zephyr/irq.c | 174 ++++-------------------------------- 4 files changed, 82 insertions(+), 622 deletions(-) diff --git a/test/system/freertos/irq.c b/test/system/freertos/irq.c index 9e121bb..d792c93 100644 --- a/test/system/freertos/irq.c +++ b/test/system/freertos/irq.c @@ -18,8 +18,7 @@ #include #include - -int irq_handler(int irq, void *priv) +static int irq_handler(int irq, void *priv) { (void)irq; (void)priv; @@ -27,10 +26,17 @@ int irq_handler(int irq, void *priv) return 0; } +static int irq_handler2(int irq, void *priv) +{ + (void)irq; + (void)priv; + + return 0; +} static int irq(void) { - int rc = 0, flags_1, flags_2; + int rc = 0; char *err_msg=""; enum metal_log_level mll= metal_get_log_level(); @@ -39,174 +45,30 @@ static int irq(void) rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 1 fail drv_id 1\n"; + err_msg = "register irq 0 fail drv_id 1\n"; goto out; } rc = metal_irq_register(2, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 2 fail drv_id 1\n"; + err_msg = "register irq 1 fail drv_id 1\n"; goto out; } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 3 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 4 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 4 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(1, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 1 fail drv_id 2\n"; + rc = metal_irq_register(2, irq_handler2, 0, (void *)2); + if (rc == 0) { + err_msg = "expect 2nd register irq 1 fail, but succeeded\n"; goto out; } - rc = metal_irq_unregister(1, 0, 0, (void *)0); + metal_irq_unregister(1); + rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "unregister irq 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(1, 0, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 1 fail expected\n"; + err_msg = "register irq 0 after unregistering failed\n"; goto out; } + metal_irq_unregister(1); + metal_irq_unregister(2); - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (!rc) { - err_msg = "unregister irq 2 drv_id 2 fail expected\n"; - goto out; - } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 2 drv_id 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq 3 drv_id 1 overwrite fail expected\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 3 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler+1, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 3 match handler fail expected\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler, 0, (void *)0); - if (rc) { - err_msg = "unregister irq 3 match handler failed \n"; - goto out; - } - - rc = metal_irq_unregister(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 1 failed \n"; - goto out; - } - - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 1\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2); - if (rc) { - err_msg = "register irq 5 fail dev 20 drv_id 2\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 3\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, 0, (void *)4); - if (rc) { - err_msg = "register irq 5 fail drv_id 4\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 5\n"; - goto out; - } - - rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, 0, (void *)4); - if (rc) { - err_msg = "unregister irq 5 drv_id 4 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)10, 0); - if (rc) { - err_msg = "unregister irq 5 dev 10 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)20, (void *)2); - if (rc) { - err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(-1, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq -1 should have failed\n"; - goto out; - } - - /* global interrupt disable/enable normal behavior */ - flags_1=metal_irq_save_disable(); - metal_irq_restore_enable(flags_1); - - /* global interrupt less common */ - flags_1=metal_irq_save_disable(); - flags_2=metal_irq_save_disable(); - metal_irq_restore_enable(flags_2); - metal_irq_restore_enable(flags_1); - - rc = 0; - + return 0; out: metal_set_log_level(mll); if ((err_msg[0] != '\0') && (!rc)) diff --git a/test/system/generic/irq.c b/test/system/generic/irq.c index 9e121bb..d792c93 100644 --- a/test/system/generic/irq.c +++ b/test/system/generic/irq.c @@ -18,8 +18,7 @@ #include #include - -int irq_handler(int irq, void *priv) +static int irq_handler(int irq, void *priv) { (void)irq; (void)priv; @@ -27,10 +26,17 @@ int irq_handler(int irq, void *priv) return 0; } +static int irq_handler2(int irq, void *priv) +{ + (void)irq; + (void)priv; + + return 0; +} static int irq(void) { - int rc = 0, flags_1, flags_2; + int rc = 0; char *err_msg=""; enum metal_log_level mll= metal_get_log_level(); @@ -39,174 +45,30 @@ static int irq(void) rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 1 fail drv_id 1\n"; + err_msg = "register irq 0 fail drv_id 1\n"; goto out; } rc = metal_irq_register(2, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 2 fail drv_id 1\n"; + err_msg = "register irq 1 fail drv_id 1\n"; goto out; } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 3 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 4 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 4 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(1, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 1 fail drv_id 2\n"; + rc = metal_irq_register(2, irq_handler2, 0, (void *)2); + if (rc == 0) { + err_msg = "expect 2nd register irq 1 fail, but succeeded\n"; goto out; } - rc = metal_irq_unregister(1, 0, 0, (void *)0); + metal_irq_unregister(1); + rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "unregister irq 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(1, 0, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 1 fail expected\n"; + err_msg = "register irq 0 after unregistering failed\n"; goto out; } + metal_irq_unregister(1); + metal_irq_unregister(2); - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (!rc) { - err_msg = "unregister irq 2 drv_id 2 fail expected\n"; - goto out; - } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 2 drv_id 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq 3 drv_id 1 overwrite fail expected\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 3 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler+1, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 3 match handler fail expected\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler, 0, (void *)0); - if (rc) { - err_msg = "unregister irq 3 match handler failed \n"; - goto out; - } - - rc = metal_irq_unregister(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 1 failed \n"; - goto out; - } - - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 1\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2); - if (rc) { - err_msg = "register irq 5 fail dev 20 drv_id 2\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 3\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, 0, (void *)4); - if (rc) { - err_msg = "register irq 5 fail drv_id 4\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 5\n"; - goto out; - } - - rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, 0, (void *)4); - if (rc) { - err_msg = "unregister irq 5 drv_id 4 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)10, 0); - if (rc) { - err_msg = "unregister irq 5 dev 10 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)20, (void *)2); - if (rc) { - err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(-1, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq -1 should have failed\n"; - goto out; - } - - /* global interrupt disable/enable normal behavior */ - flags_1=metal_irq_save_disable(); - metal_irq_restore_enable(flags_1); - - /* global interrupt less common */ - flags_1=metal_irq_save_disable(); - flags_2=metal_irq_save_disable(); - metal_irq_restore_enable(flags_2); - metal_irq_restore_enable(flags_1); - - rc = 0; - + return 0; out: metal_set_log_level(mll); if ((err_msg[0] != '\0') && (!rc)) diff --git a/test/system/linux/irq.c b/test/system/linux/irq.c index 50c1013..8e15167 100644 --- a/test/system/linux/irq.c +++ b/test/system/linux/irq.c @@ -20,7 +20,7 @@ #include -int irq_handler(int irq, void *priv) +static int irq_handler(int irq, void *priv) { (void)irq; (void)priv; @@ -28,179 +28,59 @@ int irq_handler(int irq, void *priv) return 0; } +static int irq_handler2(int irq, void *priv) +{ + (void)irq; + (void)priv; + + return 0; +} static int irq(void) { int rc = 0; char *err_msg=""; enum metal_log_level mll= metal_get_log_level(); - int i, tst_irq[6]; + int i, tst_irq[2]; /* Do not show LOG_ERROR or LOG_DEBUG for expected fail case */ metal_set_log_level(METAL_LOG_CRITICAL); - for (i=1; i < 6; i++) { + for (i = 0; i < 2; i++) { /* we only want to test the lib API, so create 'virtual' IRQs */ tst_irq[i] = eventfd(0,0); - metal_log(METAL_LOG_DEBUG, "%s: irq %d associated with fd %d\n", __func__, i, tst_irq[i]); + metal_log(METAL_LOG_DEBUG, "%s: irq %d associated with fd %d\n", + __func__, i, tst_irq[i]); } + rc = metal_irq_register(tst_irq[0], irq_handler, 0, (void *)1); + if (rc) { + err_msg = "register irq 0 fail drv_id 1\n"; + goto out; + } rc = metal_irq_register(tst_irq[1], irq_handler, 0, (void *)1); if (rc) { err_msg = "register irq 1 fail drv_id 1\n"; goto out; } - rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 2 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 3 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(tst_irq[4], irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 4 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(tst_irq[4], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 4 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(tst_irq[1], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 1 fail drv_id 2\n"; + rc = metal_irq_register(tst_irq[1], irq_handler2, 0, (void *)2); + if (rc == 0) { + err_msg = "expect 2nd register irq 1 fail, but succeeded\n"; goto out; } - rc = metal_irq_unregister(tst_irq[1], 0, 0, (void *)0); + metal_irq_unregister(tst_irq[0]); + rc = metal_irq_register(tst_irq[0], irq_handler, 0, (void *)1); if (rc) { - err_msg = "unregister irq 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[1], 0, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 1 success but fail expected\n"; + err_msg = "register irq 0 after unregistering failed\n"; goto out; } + metal_irq_unregister(tst_irq[0]); + metal_irq_unregister(tst_irq[1]); - rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2); - if (!rc) { - err_msg = "unregister irq 2 drv_id 2 success but fail expected\n"; - goto out; - } - rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 2 drv_id 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq 3 drv_id 1 overwrite fail expected\n"; - goto out; - } - rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 3 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[3], irq_handler+1, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 3 match handler success but fail expected\n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[3], irq_handler, 0, (void *)0); - if (rc) { - err_msg = "unregister irq 3 match handler failed \n"; - goto out; - } - - rc = metal_irq_unregister(tst_irq[4], irq_handler, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[4], irq_handler, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 1 failed \n"; - goto out; - } - - rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)1); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 1\n"; - goto out; - } - rc = metal_irq_register(tst_irq[5], irq_handler, (void *)20, (void *)2); - if (rc) { - err_msg = "register irq 5 fail dev 20 drv_id 2\n"; - goto out; - } - rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 3\n"; - goto out; - } - rc = metal_irq_register(tst_irq[5], irq_handler, 0, (void *)4); - if (rc) { - err_msg = "register irq 5 fail drv_id 4\n"; - goto out; - } - rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)5); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 5\n"; - goto out; - } - - rc = metal_irq_unregister(tst_irq[5], irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[5], 0, 0, (void *)4); - if (rc) { - err_msg = "unregister irq 5 drv_id 4 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[5], 0, (void *)10, 0); - if (rc) { - err_msg = "unregister irq 5 dev 10 failed \n"; - goto out; - } - rc = metal_irq_unregister(tst_irq[5], 0, (void *)20, (void *)2); - if (rc) { - err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n"; - goto out; - } - - rc = 0; - + return 0; out: - for (i=1; i < 6; i++) { + for (i = 0; i < 2; i++) { close(tst_irq[i]); } metal_set_log_level(mll); diff --git a/test/system/zephyr/irq.c b/test/system/zephyr/irq.c index e1a4c73..a1d9f1f 100644 --- a/test/system/zephyr/irq.c +++ b/test/system/zephyr/irq.c @@ -12,13 +12,13 @@ #define METAL_INTERNAL #include +#include #include #include -#include #include #include "metal-test-internal.h" -int irq_handler(int irq, void *priv) +static int irq_handler(int irq, void *priv) { (void)irq; (void)priv; @@ -26,7 +26,7 @@ int irq_handler(int irq, void *priv) return 0; } -int irq_handler_1(int irq, void *priv) +static int irq_handler2(int irq, void *priv) { (void)irq; (void)priv; @@ -36,7 +36,7 @@ int irq_handler_1(int irq, void *priv) static int irq(void) { - int rc = 0, flags_1, flags_2; + int rc = 0; char *err_msg=""; enum metal_log_level mll= metal_get_log_level(); @@ -45,174 +45,30 @@ static int irq(void) rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 1 fail drv_id 1\n"; + err_msg = "register irq 0 fail drv_id 1\n"; goto out; } rc = metal_irq_register(2, irq_handler, 0, (void *)1); if (rc) { - err_msg = "register irq 2 fail drv_id 1\n"; + err_msg = "register irq 1 fail drv_id 1\n"; goto out; } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 3 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "register irq 4 fail drv_id 1\n"; - goto out; - } - rc = metal_irq_register(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 4 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_register(1, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 1 fail drv_id 2\n"; + rc = metal_irq_register(2, irq_handler2, 0, (void *)2); + if (rc == 0) { + err_msg = "expect 2nd register irq 1 fail, but succeeded\n"; goto out; } - rc = metal_irq_unregister(1, 0, 0, (void *)0); + metal_irq_unregister(1); + rc = metal_irq_register(1, irq_handler, 0, (void *)1); if (rc) { - err_msg = "unregister irq 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(1, 0, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 1 fail expected\n"; + err_msg = "register irq 0 after unregistering failed\n"; goto out; } + metal_irq_unregister(1); + metal_irq_unregister(2); - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (!rc) { - err_msg = "unregister irq 2 drv_id 2 fail expected\n"; - goto out; - } - rc = metal_irq_register(2, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 2 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 2 drv_id 1 failed \n"; - goto out; - } - rc = metal_irq_unregister(2, 0, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 2 drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(3, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq 3 drv_id 1 overwrite fail expected\n"; - goto out; - } - rc = metal_irq_register(3, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "register irq 3 fail drv_id 2\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler_1, 0, (void *)0); - if (!rc) { - err_msg = "unregister irq 3 match handler fail expected\n"; - goto out; - } - rc = metal_irq_unregister(3, irq_handler, 0, (void *)0); - if (rc) { - err_msg = "unregister irq 3 match handler failed \n"; - goto out; - } - - rc = metal_irq_unregister(4, irq_handler, 0, (void *)2); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 2 failed \n"; - goto out; - } - rc = metal_irq_unregister(4, irq_handler, 0, (void *)1); - if (rc) { - err_msg = "unregister irq 4 match handler and drv_id 1 failed \n"; - goto out; - } - - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 1\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2); - if (rc) { - err_msg = "register irq 5 fail dev 20 drv_id 2\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 3\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, 0, (void *)4); - if (rc) { - err_msg = "register irq 5 fail drv_id 4\n"; - goto out; - } - rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5); - if (rc) { - err_msg = "register irq 5 fail dev 10 drv_id 5\n"; - goto out; - } - - rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3); - if (rc) { - err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, 0, (void *)4); - if (rc) { - err_msg = "unregister irq 5 drv_id 4 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)10, 0); - if (rc) { - err_msg = "unregister irq 5 dev 10 failed \n"; - goto out; - } - rc = metal_irq_unregister(5, 0, (void *)20, (void *)2); - if (rc) { - err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n"; - goto out; - } - - rc = metal_irq_register(-1, irq_handler, 0, (void *)1); - if (!rc) { - err_msg = "register irq -1 should have failed\n"; - goto out; - } - - /* global interrupt disable/enable normal behavior */ - flags_1=metal_irq_save_disable(); - metal_irq_restore_enable(flags_1); - - /* global interrupt less common */ - flags_1=metal_irq_save_disable(); - flags_2=metal_irq_save_disable(); - metal_irq_restore_enable(flags_2); - metal_irq_restore_enable(flags_1); - - rc = 0; - + return 0; out: metal_set_log_level(mll); if ((err_msg[0] != '\0') && (!rc))