Input: serio/gameport - check whether driver core calls succeeded

Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

authored by Randy Dunlap and committed by Dmitry Torokhov 73b59a3b 2c1dd69d

+100 -31
+49 -17
drivers/input/gameport/gameport.c
··· 53 53 54 54 static struct bus_type gameport_bus; 55 55 56 + static void gameport_add_driver(struct gameport_driver *drv); 56 57 static void gameport_add_port(struct gameport *gameport); 57 58 static void gameport_destroy_port(struct gameport *gameport); 58 59 static void gameport_reconnect_port(struct gameport *gameport); ··· 212 211 213 212 static void gameport_find_driver(struct gameport *gameport) 214 213 { 214 + int error; 215 + 215 216 down_write(&gameport_bus.subsys.rwsem); 216 - device_attach(&gameport->dev); 217 + error = device_attach(&gameport->dev); 218 + if (error < 0) 219 + printk(KERN_WARNING 220 + "gameport: device_attach() failed for %s (%s), error: %d\n", 221 + gameport->phys, gameport->name, error); 217 222 up_write(&gameport_bus.subsys.rwsem); 218 223 } 219 224 ··· 323 316 spin_unlock_irqrestore(&gameport_event_lock, flags); 324 317 } 325 318 326 - 327 319 static struct gameport_event *gameport_get_event(void) 328 320 { 329 321 struct gameport_event *event; ··· 348 342 static void gameport_handle_event(void) 349 343 { 350 344 struct gameport_event *event; 351 - struct gameport_driver *gameport_drv; 352 345 353 346 mutex_lock(&gameport_mutex); 354 347 ··· 374 369 break; 375 370 376 371 case GAMEPORT_REGISTER_DRIVER: 377 - gameport_drv = event->object; 378 - driver_register(&gameport_drv->driver); 372 + gameport_add_driver(event->object); 379 373 break; 380 374 381 375 default: ··· 536 532 if (gameport->parent) 537 533 gameport->dev.parent = &gameport->parent->dev; 538 534 535 + INIT_LIST_HEAD(&gameport->node); 539 536 spin_lock_init(&gameport->timer_lock); 540 537 init_timer(&gameport->poll_timer); 541 538 gameport->poll_timer.function = gameport_run_poll_handler; ··· 549 544 */ 550 545 static void gameport_add_port(struct gameport *gameport) 551 546 { 547 + int error; 548 + 552 549 if (gameport->parent) 553 550 gameport->parent->child = gameport; 554 551 ··· 565 558 printk(KERN_INFO "gameport: %s is %s, speed %dkHz\n", 566 559 gameport->name, gameport->phys, gameport->speed); 567 560 568 - device_add(&gameport->dev); 569 - gameport->registered = 1; 561 + error = device_add(&gameport->dev); 562 + if (error) 563 + printk(KERN_ERR 564 + "gameport: device_add() failed for %s (%s), error: %d\n", 565 + gameport->phys, gameport->name, error); 566 + else 567 + gameport->registered = 1; 570 568 } 571 569 572 570 /* ··· 595 583 596 584 if (gameport->registered) { 597 585 device_del(&gameport->dev); 598 - list_del_init(&gameport->node); 599 586 gameport->registered = 0; 600 587 } 588 + 589 + list_del_init(&gameport->node); 601 590 602 591 gameport_remove_pending_events(gameport); 603 592 put_device(&gameport->dev); ··· 717 704 } 718 705 719 706 static struct bus_type gameport_bus = { 720 - .name = "gameport", 721 - .probe = gameport_driver_probe, 722 - .remove = gameport_driver_remove, 707 + .name = "gameport", 708 + .probe = gameport_driver_probe, 709 + .remove = gameport_driver_remove, 723 710 }; 711 + 712 + static void gameport_add_driver(struct gameport_driver *drv) 713 + { 714 + int error; 715 + 716 + error = driver_register(&drv->driver); 717 + if (error) 718 + printk(KERN_ERR 719 + "gameport: driver_register() failed for %s, error: %d\n", 720 + drv->driver.name, error); 721 + } 724 722 725 723 void __gameport_register_driver(struct gameport_driver *drv, struct module *owner) 726 724 { ··· 802 778 803 779 static int __init gameport_init(void) 804 780 { 805 - gameport_task = kthread_run(gameport_thread, NULL, "kgameportd"); 806 - if (IS_ERR(gameport_task)) { 807 - printk(KERN_ERR "gameport: Failed to start kgameportd\n"); 808 - return PTR_ERR(gameport_task); 809 - } 781 + int error; 810 782 811 783 gameport_bus.dev_attrs = gameport_device_attrs; 812 784 gameport_bus.drv_attrs = gameport_driver_attrs; 813 785 gameport_bus.match = gameport_bus_match; 814 - bus_register(&gameport_bus); 786 + error = bus_register(&gameport_bus); 787 + if (error) { 788 + printk(KERN_ERR "gameport: failed to register gameport bus, error: %d\n", error); 789 + return error; 790 + } 791 + 792 + gameport_task = kthread_run(gameport_thread, NULL, "kgameportd"); 793 + if (IS_ERR(gameport_task)) { 794 + bus_unregister(&gameport_bus); 795 + error = PTR_ERR(gameport_task); 796 + printk(KERN_ERR "gameport: Failed to start kgameportd, error: %d\n", error); 797 + return error; 798 + } 815 799 816 800 return 0; 817 801 }
+51 -14
drivers/input/serio/serio.c
··· 62 62 63 63 static struct bus_type serio_bus; 64 64 65 + static void serio_add_driver(struct serio_driver *drv); 65 66 static void serio_add_port(struct serio *serio); 66 67 static void serio_destroy_port(struct serio *serio); 67 68 static void serio_reconnect_port(struct serio *serio); ··· 141 140 142 141 static void serio_find_driver(struct serio *serio) 143 142 { 143 + int error; 144 + 144 145 down_write(&serio_bus.subsys.rwsem); 145 - device_attach(&serio->dev); 146 + error = device_attach(&serio->dev); 147 + if (error < 0) 148 + printk(KERN_WARNING 149 + "serio: device_attach() failed for %s (%s), error: %d\n", 150 + serio->phys, serio->name, error); 146 151 up_write(&serio_bus.subsys.rwsem); 147 152 } 148 153 ··· 279 272 static void serio_handle_event(void) 280 273 { 281 274 struct serio_event *event; 282 - struct serio_driver *serio_drv; 283 275 284 276 mutex_lock(&serio_mutex); 285 277 ··· 310 304 break; 311 305 312 306 case SERIO_REGISTER_DRIVER: 313 - serio_drv = event->object; 314 - driver_register(&serio_drv->driver); 307 + serio_add_driver(event->object); 315 308 break; 316 309 317 310 default: ··· 530 525 531 526 __module_get(THIS_MODULE); 532 527 528 + INIT_LIST_HEAD(&serio->node); 533 529 spin_lock_init(&serio->lock); 534 530 mutex_init(&serio->drv_mutex); 535 531 device_initialize(&serio->dev); ··· 548 542 */ 549 543 static void serio_add_port(struct serio *serio) 550 544 { 545 + int error; 546 + 551 547 if (serio->parent) { 552 548 serio_pause_rx(serio->parent); 553 549 serio->parent->child = serio; ··· 559 551 list_add_tail(&serio->node, &serio_list); 560 552 if (serio->start) 561 553 serio->start(serio); 562 - device_add(&serio->dev); 563 - sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group); 564 - serio->registered = 1; 554 + error = device_add(&serio->dev); 555 + if (error) 556 + printk(KERN_ERR 557 + "serio: device_add() failed for %s (%s), error: %d\n", 558 + serio->phys, serio->name, error); 559 + else { 560 + serio->registered = 1; 561 + error = sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group); 562 + if (error) 563 + printk(KERN_ERR 564 + "serio: sysfs_create_group() failed for %s (%s), error: %d\n", 565 + serio->phys, serio->name, error); 566 + } 565 567 } 566 568 567 569 /* ··· 601 583 if (serio->registered) { 602 584 sysfs_remove_group(&serio->dev.kobj, &serio_id_attr_group); 603 585 device_del(&serio->dev); 604 - list_del_init(&serio->node); 605 586 serio->registered = 0; 606 587 } 607 588 589 + list_del_init(&serio->node); 608 590 serio_remove_pending_events(serio); 609 591 put_device(&serio->dev); 610 592 } ··· 774 756 .remove = serio_driver_remove, 775 757 }; 776 758 759 + static void serio_add_driver(struct serio_driver *drv) 760 + { 761 + int error; 762 + 763 + error = driver_register(&drv->driver); 764 + if (error) 765 + printk(KERN_ERR 766 + "serio: driver_register() failed for %s, error: %d\n", 767 + drv->driver.name, error); 768 + } 769 + 777 770 void __serio_register_driver(struct serio_driver *drv, struct module *owner) 778 771 { 779 772 drv->driver.bus = &serio_bus; ··· 932 903 933 904 static int __init serio_init(void) 934 905 { 935 - serio_task = kthread_run(serio_thread, NULL, "kseriod"); 936 - if (IS_ERR(serio_task)) { 937 - printk(KERN_ERR "serio: Failed to start kseriod\n"); 938 - return PTR_ERR(serio_task); 939 - } 906 + int error; 940 907 941 908 serio_bus.dev_attrs = serio_device_attrs; 942 909 serio_bus.drv_attrs = serio_driver_attrs; 943 910 serio_bus.match = serio_bus_match; 944 911 serio_bus.uevent = serio_uevent; 945 912 serio_bus.resume = serio_resume; 946 - bus_register(&serio_bus); 913 + error = bus_register(&serio_bus); 914 + if (error) { 915 + printk(KERN_ERR "serio: failed to register serio bus, error: %d\n", error); 916 + return error; 917 + } 918 + 919 + serio_task = kthread_run(serio_thread, NULL, "kseriod"); 920 + if (IS_ERR(serio_task)) { 921 + bus_unregister(&serio_bus); 922 + error = PTR_ERR(serio_task); 923 + printk(KERN_ERR "serio: Failed to start kseriod, error: %d\n", error); 924 + return error; 925 + } 947 926 948 927 return 0; 949 928 }