Date: Wed, 26 Oct 2005 14:23:47 -0400 From: John Baldwin <jhb@freebsd.org> To: Maksim Yevmenkin <maksim.yevmenkin@gmail.com> Cc: cvs-src@freebsd.org, src-committers@freebsd.org, Ruslan Ermilov <ru@freebsd.org>, cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/netgraph/bluetooth/drivers/bt3c ng_bt3c_pccard.c Message-ID: <200510261423.49602.jhb@freebsd.org> In-Reply-To: <bb4a86c70510261024q4a68c215l50500242dbdb5d96@mail.gmail.com> References: <200510260617.j9Q6HRqh082376@repoman.freebsd.org> <200510261258.51651.jhb@freebsd.org> <bb4a86c70510261024q4a68c215l50500242dbdb5d96@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 26 October 2005 01:24 pm, Maksim Yevmenkin wrote: > On 10/26/05, John Baldwin <jhb@freebsd.org> wrote: > > On Wednesday 26 October 2005 12:33 pm, Maksim Yevmenkin wrote: > > > John, > > > > > > [...] > > > > > > > Sorry about that, will be fixing it more cleanly. BTW, does anyone > > > > know why this driver allocates its softc manualn in its attach > > > > routine? > > > > > > ng_bt3c(4) is a netgraph device driver. there could be failures in > > > both device part (i/o port, interrupts etc.) as well as in netgraph > > > part (could not create node). so decided to do it this way. right now > > > i can not recall any other reason :) > > > > Even if netgraph fails then new-bus will still free it for you when > > attach returns ENXIO. All you have to do is set the size in your > > driver_t and axe the malloc, free, and device_set_softc calls and you > > should be done. > > would something like this do? or am i missing something? please note: > i have not tested the patch. > > cvs diff: Diffing . > Index: ng_bt3c_pccard.c > =================================================================== > RCS file: > /home/ncvs/src/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c,v > retrieving revision 1.17 > diff -u -r1.17 ng_bt3c_pccard.c > --- ng_bt3c_pccard.c 26 Oct 2005 15:52:16 -0000 1.17 > +++ ng_bt3c_pccard.c 26 Oct 2005 17:23:02 -0000 > @@ -612,11 +612,7 @@ > static int > bt3c_pccard_attach(device_t dev) > { > - bt3c_softc_p sc = NULL; > - > - sc = (bt3c_softc_p) malloc(sizeof(*sc), M_BT3C, M_NOWAIT|M_ZERO); > - if (sc == NULL) > - return (ENOMEM); > + bt3c_softc_p sc = (bt3c_softc_p) device_get_softc(dev); > > /* Allocate I/O ports */ > sc->iobase_rid = 0; > @@ -677,7 +673,6 @@ > sc->want = 1; > > NG_NODE_SET_PRIVATE(sc->node, sc); > - device_set_softc(dev, sc); > > return (0); > bad: > @@ -705,8 +700,6 @@ > sc->iobase_rid = 0; > } > > - free(sc, M_BT3C); > - > return (ENXIO); > } /* bt3c_pccacd_attach */ > > @@ -1197,7 +1190,7 @@ > static driver_t bt3c_pccard_driver = { > NG_BT3C_NODE_TYPE, > bt3c_pccard_methods, > - 0 > + sizeof(bt3c_softc_t) > }; > > static devclass_t bt3c_devclass; > > == > > max Yep. Also remove the free() in detach() as well. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510261423.49602.jhb>