From owner-svn-src-all@FreeBSD.ORG Sat Dec 3 11:16:55 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 735211065670 for ; Sat, 3 Dec 2011 11:16:55 +0000 (UTC) (envelope-from fidaj@ukr.net) Received: from fsm1.ukr.net (fsm1.ukr.net [195.214.192.120]) by mx1.freebsd.org (Postfix) with ESMTP id E7BAF8FC17 for ; Sat, 3 Dec 2011 11:16:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ukr.net; s=fsm; h=Content-Transfer-Encoding:Content-Type:Mime-Version:References:In-Reply-To:Message-ID:Subject:To:From:Date; bh=SJDgsPuF999nU8EoA5rYS7omUBHnc2oeUKyGngLYYSw=; b=slb2Mm2vdZef1qaLpXpTxAE+R7VZO5HhJ4lOAtMFnz37G2nUzcCdpPk82F4ObCEhQeBBwhtrh3pDHnojOK61GqzsznHonGzktpIOuLMugLtIDFuSjpJOUvLdhpKs92ysjW0Eyi4zog7kdfH5TWXDpsSWZ7GpdgPDpDtgfKTDllE=; Received: from [178.137.138.140] (helo=nonamehost.) by fsm1.ukr.net with esmtpsa ID 1RWnG4-000KiN-4s for svn-src-all@freebsd.org; Sat, 03 Dec 2011 12:55:52 +0200 Date: Sat, 3 Dec 2011 12:55:51 +0200 From: Ivan Klymenko To: svn-src-all@freebsd.org Message-ID: <20111203125551.156724e1@nonamehost.> In-Reply-To: <201112022119.pB2LJEqJ009294@svn.freebsd.org> References: <201112022119.pB2LJEqJ009294@svn.freebsd.org> X-Mailer: Claws Mail 3.7.10 (GTK+ 2.24.6; amd64-portbld-freebsd10.0) Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: svn commit: r228209 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2011 11:16:55 -0000 =D0=92 Fri, 2 Dec 2011 21:19:14 +0000 (UTC) Marius Strobl =D0=BF=D0=B8=D1=88=D0=B5=D1=82: > Author: marius > Date: Fri Dec 2 21:19:14 2011 > New Revision: 228209 > URL: http://svn.freebsd.org/changeset/base/228209 >=20 > Log: > - In device_probe_child(9) check the return value of > device_set_driver(9) when actually setting a driver as especially > ENOMEM is fatal in these cases. > - Annotate other calls to device_set_devclass(9) and > device_set_driver(9) without the return value being checked and that > are okay to fail.=20 > Reviewed by: yongari (slightly earlier version) >=20 > Modified: > head/sys/kern/subr_bus.c >=20 > Modified: head/sys/kern/subr_bus.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/kern/subr_bus.c Fri Dec 2 20:28:45 2011 > (r228208) +++ head/sys/kern/subr_bus.c Fri Dec 2 21:19:14 > 2011 (r228209) @@ -1129,7 +1129,7 @@ > devclass_driver_deleted(devclass_t buscl dev->parent->devclass =3D=3D > busclass) { if ((error =3D device_detach(dev)) !=3D 0) > return (error); > - device_set_driver(dev, NULL); > + (void)device_set_driver(dev, NULL); > BUS_PROBE_NOMATCH(dev->parent, dev); > devnomatch(dev); > dev->flags |=3D DF_DONENOMATCH; > @@ -2007,19 +2007,22 @@ device_probe_child(device_t dev, device_ > for (dl =3D first_matching_driver(dc, child); > dl; > dl =3D next_matching_driver(dc, child, dl)) { > - > /* If this driver's pass is too high, then > ignore it. */ if (dl->pass > bus_current_pass) > continue; > =20 > PDEBUG(("Trying %s", > DRIVERNAME(dl->driver))); > - device_set_driver(child, dl->driver); > + result =3D device_set_driver(child, > dl->driver); > + if (result =3D=3D ENOMEM) > + return (result); > + else if (result !=3D 0) > + continue; > if (!hasclass) { > if (device_set_devclass(child, > dl->driver->name)) { printf("driver bug: Unable to set devclass > (devname: %s)\n", (child ? device_get_name(child) : > "no device")); > - device_set_driver(child, > NULL); > + > (void)device_set_driver(child, NULL); continue; > } > } > @@ -2033,7 +2036,7 @@ device_probe_child(device_t dev, device_ > /* Reset flags and devclass before the next > probe. */ child->devflags =3D 0; > if (!hasclass) > - device_set_devclass(child, NULL); > + (void)device_set_devclass(child, > NULL);=20 > /* > * If the driver returns SUCCESS, there can > be @@ -2050,7 +2053,7 @@ device_probe_child(device_t dev, device_ > * certainly doesn't match. > */ > if (result > 0) { > - device_set_driver(child, NULL); > + (void)device_set_driver(child, NULL); > continue; > } > =20 > @@ -2113,7 +2116,9 @@ device_probe_child(device_t dev, device_ > if (result !=3D 0) > return (result); > } > - device_set_driver(child, best->driver); > + result =3D device_set_driver(child, best->driver); > + if (result !=3D 0) > + return (result); > resource_int_value(best->driver->name, child->unit, > "flags", &child->devflags); > =20 > @@ -2722,8 +2727,8 @@ device_attach(device_t dev) > dev->driver->name, dev->unit, error); > /* Unset the class; set in device_probe_child */ > if (dev->devclass =3D=3D NULL) > - device_set_devclass(dev, NULL); > - device_set_driver(dev, NULL); > + (void)device_set_devclass(dev, NULL); > + (void)device_set_driver(dev, NULL); > device_sysctl_fini(dev); > dev->state =3D DS_NOTPRESENT; > return (error); > @@ -2776,7 +2781,7 @@ device_detach(device_t dev) > devclass_delete_device(dev->devclass, dev); > =20 > dev->state =3D DS_NOTPRESENT; > - device_set_driver(dev, NULL); > + (void)device_set_driver(dev, NULL); > device_set_desc(dev, NULL); > device_sysctl_fini(dev); > =20 > @@ -4613,7 +4618,6 @@ print_driver(driver_t *driver, int inden > print_driver_short(driver, indent); > } > =20 > - > static void > print_driver_list(driver_list_t drivers, int indent) > { Thank you! Now I can again connect a USB external drive... But, nevertheless, remains a problem when you connect an external drive via FireWire...