Date: Mon, 16 Dec 2019 16:41:24 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355806 - in head/sys/dev: adb gpio hyperv/input kbdmux usb/input vkbd Message-ID: <201912161641.xBGGfONf023254@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Mon Dec 16 16:41:24 2019 New Revision: 355806 URL: https://svnweb.freebsd.org/changeset/base/355806 Log: kbd drivers: don't double register keyboard drivers Keyboard drivers are generally registered via linker set. In these cases, they're also available as kmods which use KPI for registering/unregistering keyboard drivers outside of the linker set. For built-in modules, we still fire off MOD_LOAD and maybe even MOD_UNLOAD if an error occurs, leading to registration via linker set and at MOD_LOAD time. This is a minor optimization at best, but it keeps the internal kbd driver tidy as a future change will merge the linker set driver list into its internal keyboard_drivers list via SYSINIT and simplify driver lookup by removing the need to consult the linker set. Modified: head/sys/dev/adb/adb_kbd.c head/sys/dev/gpio/gpiokeys.c head/sys/dev/hyperv/input/hv_kbd.c head/sys/dev/kbdmux/kbdmux.c head/sys/dev/usb/input/ukbd.c head/sys/dev/vkbd/vkbd.c Modified: head/sys/dev/adb/adb_kbd.c ============================================================================== --- head/sys/dev/adb/adb_kbd.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/adb/adb_kbd.c Mon Dec 16 16:41:24 2019 (r355806) @@ -850,11 +850,15 @@ akbd_modevent(module_t mod, int type, void *data) { switch (type) { case MOD_LOAD: +#ifdef KLD_MODULE kbd_add_driver(&akbd_kbd_driver); +#endif break; case MOD_UNLOAD: +#ifdef KLD_MODULE kbd_delete_driver(&akbd_kbd_driver); +#endif break; default: Modified: head/sys/dev/gpio/gpiokeys.c ============================================================================== --- head/sys/dev/gpio/gpiokeys.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/gpio/gpiokeys.c Mon Dec 16 16:41:24 2019 (r355806) @@ -983,6 +983,8 @@ KEYBOARD_DRIVER(gpiokeys, gpiokeyssw, gpiokeys_configu static int gpiokeys_driver_load(module_t mod, int what, void *arg) { + +#ifdef KLD_MODULE switch (what) { case MOD_LOAD: kbd_add_driver(&gpiokeys_kbd_driver); @@ -991,6 +993,7 @@ gpiokeys_driver_load(module_t mod, int what, void *arg kbd_delete_driver(&gpiokeys_kbd_driver); break; } +#endif return (0); } Modified: head/sys/dev/hyperv/input/hv_kbd.c ============================================================================== --- head/sys/dev/hyperv/input/hv_kbd.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/hyperv/input/hv_kbd.c Mon Dec 16 16:41:24 2019 (r355806) @@ -490,6 +490,8 @@ hv_kbd_intr(hv_kbd_sc *sc) int hvkbd_driver_load(module_t mod, int what, void *arg) { + +#ifdef KLD_MODULE switch (what) { case MOD_LOAD: kbd_add_driver(&hvkbd_kbd_driver); @@ -498,6 +500,7 @@ hvkbd_driver_load(module_t mod, int what, void *arg) kbd_delete_driver(&hvkbd_kbd_driver); break; } +#endif return (0); } Modified: head/sys/dev/kbdmux/kbdmux.c ============================================================================== --- head/sys/dev/kbdmux/kbdmux.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/kbdmux/kbdmux.c Mon Dec 16 16:41:24 2019 (r355806) @@ -1423,11 +1423,15 @@ kbdmux_modevent(module_t mod, int type, void *data) switch (type) { case MOD_LOAD: +#ifdef KLD_MODULE if ((error = kbd_add_driver(&kbdmux_kbd_driver)) != 0) break; +#endif if ((sw = kbd_get_switch(KEYBOARD_NAME)) == NULL) { +#ifdef KLD_MODULE kbd_delete_driver(&kbdmux_kbd_driver); +#endif error = ENXIO; break; } @@ -1436,14 +1440,18 @@ kbdmux_modevent(module_t mod, int type, void *data) if ((error = (*sw->probe)(0, NULL, 0)) != 0 || (error = (*sw->init)(0, &kbd, NULL, 0)) != 0) { +#ifdef KLD_MODULE kbd_delete_driver(&kbdmux_kbd_driver); +#endif break; } #ifdef KBD_INSTALL_CDEV if ((error = kbd_attach(kbd)) != 0) { (*sw->term)(kbd); +#ifdef KLD_MODULE kbd_delete_driver(&kbdmux_kbd_driver); +#endif break; } #endif @@ -1454,7 +1462,9 @@ kbdmux_modevent(module_t mod, int type, void *data) kbd_detach(kbd); #endif (*sw->term)(kbd); +#ifdef KLD_MODULE kbd_delete_driver(&kbdmux_kbd_driver); +#endif break; } break; @@ -1470,7 +1480,9 @@ kbdmux_modevent(module_t mod, int type, void *data) kbd_detach(kbd); #endif (*sw->term)(kbd); +#ifdef KLD_MODULE kbd_delete_driver(&kbdmux_kbd_driver); +#endif } error = 0; break; Modified: head/sys/dev/usb/input/ukbd.c ============================================================================== --- head/sys/dev/usb/input/ukbd.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/usb/input/ukbd.c Mon Dec 16 16:41:24 2019 (r355806) @@ -2290,6 +2290,7 @@ KEYBOARD_DRIVER(ukbd, ukbdsw, ukbd_configure); static int ukbd_driver_load(module_t mod, int what, void *arg) { +#ifdef KLD_MODULE switch (what) { case MOD_LOAD: kbd_add_driver(&ukbd_kbd_driver); @@ -2298,6 +2299,7 @@ ukbd_driver_load(module_t mod, int what, void *arg) kbd_delete_driver(&ukbd_kbd_driver); break; } +#endif return (0); } Modified: head/sys/dev/vkbd/vkbd.c ============================================================================== --- head/sys/dev/vkbd/vkbd.c Mon Dec 16 15:41:32 2019 (r355805) +++ head/sys/dev/vkbd/vkbd.c Mon Dec 16 16:41:24 2019 (r355806) @@ -1360,11 +1360,15 @@ vkbd_modevent(module_t mod, int type, void *data) clone_cleanup(&vkbd_dev_clones); return (ENOMEM); } +#ifdef KLD_MODULE kbd_add_driver(&vkbd_kbd_driver); +#endif break; case MOD_UNLOAD: +#ifdef KLD_MODULE kbd_delete_driver(&vkbd_kbd_driver); +#endif EVENTHANDLER_DEREGISTER(dev_clone, tag); clone_cleanup(&vkbd_dev_clones); break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912161641.xBGGfONf023254>