Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Feb 2010 12:08:12 -0500
From:      "J.R. Oldroyd" <fbsd@opal.com>
To:        Hans Petter Selasky <hselasky@c2i.net>
Cc:        freebsd-multimedia@freebsd.org, lme@freebsd.org, emulation@freebsd.org, multimedia@freebsd.org, Alexander Leidinger <Alexander@leidinger.net>
Subject:   Re: FYI: v4l-linuxulator support in FreeBSD-current now [panic]
Message-ID:  <20100218120812.2224f6bf@shibato.opal.com>
In-Reply-To: <201002172137.25396.hselasky@c2i.net>
References:  <20091204223126.00005392@unknown> <20100112124621.59fa3747@shibato.opal.com> <201001121849.48833.hselasky@c2i.net> <201002172137.25396.hselasky@c2i.net>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/q6wfV9dmVu6L0DVac4rl6oH
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

On Wed, 17 Feb 2010 21:37:25 +0100, Hans Petter Selasky <hselasky@c2i.net> =
wrote:
>
> On Tuesday 12 January 2010 18:49:48 Hans Petter Selasky wrote:
> > Re: FYI: v4l-linuxulator support in FreeBSD-current now
> >=20
>=20
> Hi,
>=20
> Some panics have cropped up when using linux-V4L with webcamd.
>=20
> 1st) panic: freeing memory in linux_v4l_cliplist_free() which is not=20
> allocated, but there seems to be more which needs to be done.
>=20
> I tried to fix something, but it was not enough.
>=20
> Help appreciated.
>=20
> We are currently debugging this issue @ #bsdusb on efnet.
>=20
> --HPS
>=20
> --- linux_ioctl.c.orig  2010-02-17 20:42:53.000000000 +0100
> +++ linux_ioctl.c       2010-02-17 21:03:10.000000000 +0100
> @@ -2711,7 +2711,7 @@
>         /* XXX: If there can be no concurrency: s/M_NOWAIT/M_WAITOK/ */
>         if ((*ppvc =3D malloc(sizeof(**ppvc), M_LINUX, M_NOWAIT)) =3D=3D =
NULL)
>                 return (ENOMEM);    /* XXX: linux has no ENOMEM here */
> -       memcpy(&vclip, *ppvc, sizeof(vclip));
> +       memcpy(*ppvc, &vclip, sizeof(vclip));
>         (*ppvc)->next =3D NULL;
>         return (0);
>  }
> @@ -2719,13 +2719,15 @@
>  static int
>  linux_v4l_cliplist_free(struct video_window *vw)
>  {
> -       struct video_clip **ppvc;
> -       struct video_clip **ppvc_next;
> +       struct video_clip *ppvc;
> +       struct video_clip *ppvc_next;
> =20
> -       for (ppvc =3D &(vw->clips); *ppvc !=3D NULL; ppvc =3D ppvc_next) {
> -               ppvc_next =3D &((*ppvc)->next);
> -               free(*ppvc, M_LINUX);
> +       for (ppvc =3D vw->clips; ppvc !=3D NULL; ppvc =3D ppvc_next) {
> +               ppvc_next =3D ppvc->next;
> +               free(ppvc, M_LINUX);
>         }
> +       vw->clips =3D NULL;
> +
>         return (0);
>  }
> =20

I wrote the video_clip support but was unable to test it due to lack
of either a driver that supported it or an application that used it.
I did this based on very sparse documentation on what a video clip
list actually is.

Looks like the memcpy in linux_v4l_clip_copy is indeed backwards,
so sorry about that.

Simplifying the double pointers in linux_v4l_cliplist_free is
probably also OK, but in that case, you should also rename the
pointers to "pvc" rather than "ppvc".

If it is still failing with these changes, it would help to know if
the failure is happening during the cliplist build, during the
ioctl that uses the cliplist, or when tearing down the cliplist
after the call.  You could try instrumenting LINUX_VIDIOCSWIN to see
how far it is getting.

	-jr

--Sig_/q6wfV9dmVu6L0DVac4rl6oH
Content-Type: application/pgp-signature; name=signature.asc
Content-Disposition: attachment; filename=signature.asc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)

iEYEARECAAYFAkt9c/wACgkQls33urr0k4md+gCfThu0FwXq9Hw145yRlJDgDeLE
VvkAn084uy/VFuKPLfCISdhiD0PfU6uY
=hAoZ
-----END PGP SIGNATURE-----

--Sig_/q6wfV9dmVu6L0DVac4rl6oH--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100218120812.2224f6bf>