Skip site navigation (1)Skip section navigation (2)
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>