diff options
Diffstat (limited to 'kernel/irq/irq_test.c')
| -rw-r--r-- | kernel/irq/irq_test.c | 55 | 
1 files changed, 30 insertions, 25 deletions
| diff --git a/kernel/irq/irq_test.c b/kernel/irq/irq_test.c index a75abebed7f2..e2d31914b3c4 100644 --- a/kernel/irq/irq_test.c +++ b/kernel/irq/irq_test.c @@ -41,21 +41,37 @@ static struct irq_chip fake_irq_chip = {  	.flags          = IRQCHIP_SKIP_SET_WAKE,  }; -static void irq_disable_depth_test(struct kunit *test) +static int irq_test_setup_fake_irq(struct kunit *test, struct irq_affinity_desc *affd)  {  	struct irq_desc *desc; -	int virq, ret; +	int virq; -	virq = irq_domain_alloc_descs(-1, 1, 0, NUMA_NO_NODE, NULL); +	virq = irq_domain_alloc_descs(-1, 1, 0, NUMA_NO_NODE, affd);  	KUNIT_ASSERT_GE(test, virq, 0); -	irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); +	irq_set_chip_and_handler(virq, &fake_irq_chip, handle_simple_irq); + +	desc = irq_to_desc(virq); +	KUNIT_ASSERT_PTR_NE(test, desc, NULL); + +	/* On some architectures, IRQs are NOREQUEST | NOPROBE by default. */ +	irq_settings_clr_norequest(desc); + +	return virq; +} + +static void irq_disable_depth_test(struct kunit *test) +{ +	struct irq_desc *desc; +	int virq, ret; + +	virq = irq_test_setup_fake_irq(test, NULL);  	desc = irq_to_desc(virq);  	KUNIT_ASSERT_PTR_NE(test, desc, NULL);  	ret = request_irq(virq, noop_handler, 0, "test_irq", NULL); -	KUNIT_EXPECT_EQ(test, ret, 0); +	KUNIT_ASSERT_EQ(test, ret, 0);  	KUNIT_EXPECT_EQ(test, desc->depth, 0); @@ -73,16 +89,13 @@ static void irq_free_disabled_test(struct kunit *test)  	struct irq_desc *desc;  	int virq, ret; -	virq = irq_domain_alloc_descs(-1, 1, 0, NUMA_NO_NODE, NULL); -	KUNIT_ASSERT_GE(test, virq, 0); - -	irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); +	virq = irq_test_setup_fake_irq(test, NULL);  	desc = irq_to_desc(virq);  	KUNIT_ASSERT_PTR_NE(test, desc, NULL);  	ret = request_irq(virq, noop_handler, 0, "test_irq", NULL); -	KUNIT_EXPECT_EQ(test, ret, 0); +	KUNIT_ASSERT_EQ(test, ret, 0);  	KUNIT_EXPECT_EQ(test, desc->depth, 0); @@ -93,7 +106,7 @@ static void irq_free_disabled_test(struct kunit *test)  	KUNIT_EXPECT_GE(test, desc->depth, 1);  	ret = request_irq(virq, noop_handler, 0, "test_irq", NULL); -	KUNIT_EXPECT_EQ(test, ret, 0); +	KUNIT_ASSERT_EQ(test, ret, 0);  	KUNIT_EXPECT_EQ(test, desc->depth, 0);  	free_irq(virq, NULL); @@ -112,10 +125,7 @@ static void irq_shutdown_depth_test(struct kunit *test)  	if (!IS_ENABLED(CONFIG_SMP))  		kunit_skip(test, "requires CONFIG_SMP for managed shutdown"); -	virq = irq_domain_alloc_descs(-1, 1, 0, NUMA_NO_NODE, &affinity); -	KUNIT_ASSERT_GE(test, virq, 0); - -	irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); +	virq = irq_test_setup_fake_irq(test, &affinity);  	desc = irq_to_desc(virq);  	KUNIT_ASSERT_PTR_NE(test, desc, NULL); @@ -124,7 +134,7 @@ static void irq_shutdown_depth_test(struct kunit *test)  	KUNIT_ASSERT_PTR_NE(test, data, NULL);  	ret = request_irq(virq, noop_handler, 0, "test_irq", NULL); -	KUNIT_EXPECT_EQ(test, ret, 0); +	KUNIT_ASSERT_EQ(test, ret, 0);  	KUNIT_EXPECT_TRUE(test, irqd_is_activated(data));  	KUNIT_EXPECT_TRUE(test, irqd_is_started(data)); @@ -169,13 +179,12 @@ static void irq_cpuhotplug_test(struct kunit *test)  		kunit_skip(test, "requires more than 1 CPU for CPU hotplug");  	if (!cpu_is_hotpluggable(1))  		kunit_skip(test, "CPU 1 must be hotpluggable"); +	if (!cpu_online(1)) +		kunit_skip(test, "CPU 1 must be online");  	cpumask_copy(&affinity.mask, cpumask_of(1)); -	virq = irq_domain_alloc_descs(-1, 1, 0, NUMA_NO_NODE, &affinity); -	KUNIT_ASSERT_GE(test, virq, 0); - -	irq_set_chip_and_handler(virq, &fake_irq_chip, handle_simple_irq); +	virq = irq_test_setup_fake_irq(test, &affinity);  	desc = irq_to_desc(virq);  	KUNIT_ASSERT_PTR_NE(test, desc, NULL); @@ -184,7 +193,7 @@ static void irq_cpuhotplug_test(struct kunit *test)  	KUNIT_ASSERT_PTR_NE(test, data, NULL);  	ret = request_irq(virq, noop_handler, 0, "test_irq", NULL); -	KUNIT_EXPECT_EQ(test, ret, 0); +	KUNIT_ASSERT_EQ(test, ret, 0);  	KUNIT_EXPECT_TRUE(test, irqd_is_activated(data));  	KUNIT_EXPECT_TRUE(test, irqd_is_started(data)); @@ -196,13 +205,9 @@ static void irq_cpuhotplug_test(struct kunit *test)  	KUNIT_EXPECT_EQ(test, desc->depth, 1);  	KUNIT_EXPECT_EQ(test, remove_cpu(1), 0); -	KUNIT_EXPECT_FALSE(test, irqd_is_activated(data)); -	KUNIT_EXPECT_FALSE(test, irqd_is_started(data));  	KUNIT_EXPECT_GE(test, desc->depth, 1);  	KUNIT_EXPECT_EQ(test, add_cpu(1), 0); -	KUNIT_EXPECT_FALSE(test, irqd_is_activated(data)); -	KUNIT_EXPECT_FALSE(test, irqd_is_started(data));  	KUNIT_EXPECT_EQ(test, desc->depth, 1);  	enable_irq(virq); | 
