Date: Thu, 3 Oct 1996 14:42:33 -0700 (PDT) From: jpt@magic.net To: freebsd-gnats-submit@freebsd.org Subject: kern/1716: LKM does not install character devices Message-ID: <199610032142.OAA27565@freefall.freebsd.org> Resent-Message-ID: <199610032150.OAA29210@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1716 >Category: kern >Synopsis: LKM does not install character devices >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Oct 3 14:50:02 PDT 1996 >Last-Modified: >Originator: Joseph Thomas >Organization: Minnesota Supercomputer Center, Inc. >Release: FreeBSD-2.2-960801-SNAP >Environment: FreeBSD nevyn.msci.magic.net 2.2-960801-SNAP FreeBSD 2.2-960801-SNAP #4: Thu Oct 3 16:11:05 1996 jpt@nevyn.msci.magic.net:/usr/src/sys/compile/NEVYN i386 >Description: Support was not included for installing character devices into the cdevsw table via lkm. See sys/kern/kern_lkm.c. static int _lkm_dev(lkmtp, cmd) struct lkm_table *lkmtp; int cmd; { ... switch(cmd) { case LKM_E_LOAD: ... switch(args->lkm_devtype) { case LM_DT_BLOCK: ... break; case LM_DT_CHAR: break; <<==== Missing insatll code default: ... } ... } return(err); } case LKM_E_UNLOAD: is also incorrect. Value of "descrip" is only set for LM_DT_BLOCK case but is used for LM_DT_CHAR case. Descrip should either be set outside of inner case (BLOCK/CHAR) or should also be set for CHAR case. >How-To-Repeat: >Fix: *************** *** 703,708 **** --- 703,717 ---- break; case LM_DT_CHAR: + if ( ( i = args->lkm_offset ) == -1 ) /* auto */ + descrip = (dev_t) -1; + else + descrip = makedev ( args->lkm_offset, 0 ); + if ( err = cdevsw_add ( &descrip, args->lkm_dev.cdev, + &(args->lkm_olddev.cdev) ) ) { + break; + } + args->lkm_offset = major ( descrip ); break; default: *************** *** 714,724 **** case LKM_E_UNLOAD: /* current slot... */ i = args->lkm_offset; switch(args->lkm_devtype) { case LM_DT_BLOCK: /* replace current slot contents with old contents */ - descrip = makedev(i,0); bdevsw_add(&descrip, args->lkm_olddev.bdev,NULL); break; --- 723,733 ---- case LKM_E_UNLOAD: /* current slot... */ i = args->lkm_offset; + descrip = makedev(i,0); switch(args->lkm_devtype) { case LM_DT_BLOCK: /* replace current slot contents with old contents */ bdevsw_add(&descrip, args->lkm_olddev.bdev,NULL); break; >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199610032142.OAA27565>