Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

char: misc: Adapt and add test cases for simple minor space division

Adapt and add test cases for next change which regards minor whose
value > macro MISC_DYNAMIC_MINOR as invalid parameter when register
miscdevice, hence get a simple minor space division below:

< MISC_DYNAMIC_MINOR: fixed minor code
== MISC_DYNAMIC_MINOR: indicator to request dynamic minor code
> MISC_DYNAMIC_MINOR: dynamic minor code requested

Signed-off-by: Zijun Hu <zijun.hu@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250714-rfc_miscdev-v6-2-2ed949665bde@oss.qualcomm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Zijun Hu and committed by
Greg Kroah-Hartman
f4e47aff 8ac646d6

+21 -30
+21 -30
drivers/char/misc_minor_kunit.c
··· 7 7 #include <linux/file.h> 8 8 #include <linux/init_syscalls.h> 9 9 10 - /* dynamic minor (2) */ 11 - static struct miscdevice dev_dynamic_minor = { 12 - .minor = 2, 13 - .name = "dev_dynamic_minor", 14 - }; 15 - 16 10 /* static minor (LCD_MINOR) */ 17 11 static struct miscdevice dev_static_minor = { 18 12 .minor = LCD_MINOR, ··· 18 24 .minor = MISC_DYNAMIC_MINOR, 19 25 .name = "dev_misc_dynamic_minor", 20 26 }; 21 - 22 - static void kunit_dynamic_minor(struct kunit *test) 23 - { 24 - int ret; 25 - 26 - ret = misc_register(&dev_dynamic_minor); 27 - KUNIT_EXPECT_EQ(test, 0, ret); 28 - KUNIT_EXPECT_EQ(test, 2, dev_dynamic_minor.minor); 29 - misc_deregister(&dev_dynamic_minor); 30 - } 31 27 32 28 static void kunit_static_minor(struct kunit *test) 33 29 { ··· 141 157 { 142 158 if (minor < 0) 143 159 return false; 144 - if (minor == MISC_DYNAMIC_MINOR) 145 - return false; 146 - if (minor >= 0 && minor <= 15) 147 - return false; 148 - if (minor >= 128 && minor < MISC_DYNAMIC_MINOR) 149 - return false; 150 - return true; 160 + return minor > MISC_DYNAMIC_MINOR; 151 161 } 152 162 153 163 static int miscdev_test_open(struct inode *inode, struct file *file) ··· 535 557 */ 536 558 miscstat.minor = miscdyn.minor; 537 559 ret = misc_register(&miscstat); 538 - KUNIT_EXPECT_EQ(test, ret, -EBUSY); 560 + KUNIT_EXPECT_EQ(test, ret, -EINVAL); 539 561 if (ret == 0) 540 562 misc_deregister(&miscstat); 541 563 ··· 568 590 misc_deregister(&miscdyn); 569 591 570 592 ret = misc_register(&miscstat); 571 - KUNIT_EXPECT_EQ(test, ret, 0); 572 - KUNIT_EXPECT_EQ(test, miscstat.minor, miscdyn.minor); 593 + KUNIT_EXPECT_EQ(test, ret, -EINVAL); 594 + if (ret == 0) 595 + misc_deregister(&miscstat); 573 596 574 597 /* 575 598 * Try to register a dynamic minor after registering a static minor ··· 580 601 miscdyn.minor = MISC_DYNAMIC_MINOR; 581 602 ret = misc_register(&miscdyn); 582 603 KUNIT_EXPECT_EQ(test, ret, 0); 583 - KUNIT_EXPECT_NE(test, miscdyn.minor, miscstat.minor); 604 + KUNIT_EXPECT_EQ(test, miscdyn.minor, miscstat.minor); 584 605 KUNIT_EXPECT_TRUE(test, is_valid_dynamic_minor(miscdyn.minor)); 585 606 if (ret == 0) 586 607 misc_deregister(&miscdyn); 608 + } 587 609 588 - miscdev_test_can_open(test, &miscstat); 610 + /* Take minor(> MISC_DYNAMIC_MINOR) as invalid when register miscdevice */ 611 + static void miscdev_test_invalid_input(struct kunit *test) 612 + { 613 + struct miscdevice misc_test = { 614 + .minor = MISC_DYNAMIC_MINOR + 1, 615 + .name = "misc_test", 616 + .fops = &miscdev_test_fops, 617 + }; 618 + int ret; 589 619 590 - misc_deregister(&miscstat); 620 + ret = misc_register(&misc_test); 621 + KUNIT_EXPECT_EQ(test, ret, -EINVAL); 622 + if (ret == 0) 623 + misc_deregister(&misc_test); 591 624 } 592 625 593 626 static struct kunit_case test_cases[] = { 594 - KUNIT_CASE(kunit_dynamic_minor), 595 627 KUNIT_CASE(kunit_static_minor), 596 628 KUNIT_CASE(kunit_misc_dynamic_minor), 629 + KUNIT_CASE(miscdev_test_invalid_input), 597 630 KUNIT_CASE_PARAM(miscdev_test_twice, miscdev_gen_params), 598 631 KUNIT_CASE_PARAM(miscdev_test_duplicate_minor, miscdev_gen_params), 599 632 KUNIT_CASE(miscdev_test_duplicate_name),