From owner-p4-projects@FreeBSD.ORG Sun Jul 29 14:55:48 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BE6E116A468; Sun, 29 Jul 2007 14:55:48 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3D0CA16A418 for ; Sun, 29 Jul 2007 14:55:48 +0000 (UTC) (envelope-from thioretic@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 2054213C465 for ; Sun, 29 Jul 2007 14:55:48 +0000 (UTC) (envelope-from thioretic@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6TEtmCU024743 for ; Sun, 29 Jul 2007 14:55:48 GMT (envelope-from thioretic@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6TEtls5024734 for perforce@freebsd.org; Sun, 29 Jul 2007 14:55:47 GMT (envelope-from thioretic@FreeBSD.org) Date: Sun, 29 Jul 2007 14:55:47 GMT Message-Id: <200707291455.l6TEtls5024734@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to thioretic@FreeBSD.org using -f From: Maxim Zhuravlev To: Perforce Change Reviews Cc: Subject: PERFORCE change 124314 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 29 Jul 2007 14:55:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=124314 Change 124314 by thioretic@thioretic on 2007/07/29 14:55:46 Some semantics verification and resulting cleanups. Affected files ... .. //depot/projects/soc2007/thioretic_gidl/kern/subr_bus.c#23 edit Differences ... ==== //depot/projects/soc2007/thioretic_gidl/kern/subr_bus.c#23 (text+ko) ==== @@ -1345,7 +1345,9 @@ } return (NULL); } + dcl->devclass_ptr = dc; TAILQ_INSERT_TAIL(&dcp->filters, dcl, link); + bus_data_generation_update(); } return (dc); } @@ -1404,7 +1406,6 @@ if (!dl) return (ENOMEM); - isfilter = driverinfo_isfilter (driver); /* * Compile the driver's methods. Also increase the reference count * so that the class doesn't get freed when the last instance @@ -1416,10 +1417,15 @@ drv_internal_t drv_intnl; drv_intnl = driverinfo_create_driver_drv_internal (driver); - if (!drv_intnl && !(di = driverinfo_add_driver(intnl))) - if (drv_intnl) free (drv_intnl); + if (!drv_intnl && !(di = driverinfo_add_driver(drv_intnl))) + if (drv_intnl){ + free (drv_intnl); + return (1); + } } + isfilter = driverinfo_isfilter (driver); + /* * Make sure the devclass which the driver is implementing exists. */ @@ -1442,7 +1448,7 @@ BUS_DRIVER_ADDED(dc->devices[i], driver); } else { - devclass_filter2devices(dc, driver); + devclass_filter2devices(pdc, driver); } bus_data_generation_update(); @@ -1970,8 +1976,6 @@ dev->devclass = dc; snprintf(dev->nameunit, buflen, "%s%d", dc->name, dev->unit); - devclass_device2filters (dc, dev); - return (0); } @@ -2015,6 +2019,12 @@ device_set_driver (dev, driver); if (DEVICE_PROBE(dev)<=0){ device_attach(dev); + else { + dev->driver = TAILQ_FIRST(&dev->drivers[DRL_LOWEST]); + dev->driver_level=DRL_LOWEST; + dev->raw--; + if(!dev->raw) + dev->state = DS_ATTACHED; } } @@ -2039,7 +2049,7 @@ for (i=0, i<=dc->maxunit; i++){ if ((dc->devices[i]) && - ((dc->devices[i])->state >= DS_ALIVE)) + ((dc->devices[i])->state == DS_ATTACHED)) filter_probe_and_attach (dv->devices[i], filter); } } @@ -2082,12 +2092,13 @@ return (NULL); TAILQ_INIT(&(dev->parents)); pd = malloc(sizeof(struct devicelink), M_BUS, M_NOWAIT|M_ZERO); + if (!pd){free(dev); return(NULL);} pd->device_ptr = parent; - TAILQ_INSERT_TAIL(&(dev->parents), pd, link); - TAILQ_INIT(&(dev->children)); + TAILQ_INSERT_TAIL(&dev->parents, pd, link); + TAILQ_INIT(&dev->children); kobj_init((kobj_t) dev, &drv_compat_ctrl_driver) for (level=DRL_LOWEST; level<=DRL_TOPMOST; level++) - TAILQ_INIT(&((dev->drivers)[level])); + TAILQ_INIT(&dev->drivers[level]); dev->devclass = NULL; dev->state = DS_NOTPRESENT; dev->refs = 0; @@ -3212,7 +3223,7 @@ level = driverinfo_flags2idx(flags); if (driver != NULL){ - TAILQ_FOREACH(dil, &(dev->drivers[level]), link){ + TAILQ_FOREACH(dil, &dev->drivers[level], link){ if (dil->pdriver == di) break; }