From owner-p4-projects@FreeBSD.ORG Sun Jul 29 15:00:55 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 58AE016A41B; Sun, 29 Jul 2007 15:00:55 +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 0C65A16A41A for ; Sun, 29 Jul 2007 15:00:55 +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 EFE9B13C461 for ; Sun, 29 Jul 2007 15:00:54 +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 l6TF0sUr025090 for ; Sun, 29 Jul 2007 15:00:54 GMT (envelope-from thioretic@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6TF0sIL025087 for perforce@freebsd.org; Sun, 29 Jul 2007 15:00:54 GMT (envelope-from thioretic@FreeBSD.org) Date: Sun, 29 Jul 2007 15:00:54 GMT Message-Id: <200707291500.l6TF0sIL025087@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 124315 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 15:00:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=124315 Change 124315 by thioretic@thioretic on 2007/07/29 15:00:03 Propogate all changes in soc2007/thioretic_gidl to new soc2007/thioretic_gidl2 Affected files ... .. //depot/projects/soc2007/thioretic_gidl2/kern/subr_bus.c#2 integrate Differences ... ==== //depot/projects/soc2007/thioretic_gidl2/kern/subr_bus.c#2 (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; }