new usb2 stack : -current patch with mpsafe tty layer available
?
Olivier SMEDTS
olivier at gid0.org
Sat Sep 13 23:47:02 UTC 2008
Thanks for the patchs. I've got it working, no problem with my usb
mouse and FAT32 formatted usb flash key.
One glitch though : a warning in usb2_serial with latest CURRENT,
which made gcc fail with -Werror :
cc -O2 -pipe -march=native -fno-strict-aliasing -Werror -D_KERNEL
-DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq
-finline-limit=8000 --param inline-unit-growth=100 --param
large-function-growth=1000 -fno-common -fno-omit-frame-pointer
-mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2
-mno-sse3 -mno-mmx -mno-3dnow -msoft-float
-fno-asynchronous-unwind-tables -ffreestanding -fstack-protector
-fstack-protector -Wall -Wredundant-decls -Wnested-externs
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline
-Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -c
/work/src/sys/modules/usb2/serial/../../../dev/usb2/serial/usb2_serial.c
cc1: warnings being treated as errors
/work/src/sys/modules/usb2/serial/../../../dev/usb2/serial/usb2_serial.c:
In function 'usb2_com_put_data':
/work/src/sys/modules/usb2/serial/../../../dev/usb2/serial/usb2_serial.c:1043:
warning: 'cnt' may be used uninitialized in this function
I had to compile it without -Werror.
Olivier
2008/9/13 Hans Petter Selasky <hselasky at c2i.net>:
> On Saturday 13 September 2008, Olivier SMEDTS wrote:
>> 2008/9/13 Hans Petter Selasky <hselasky at c2i.net>:
>> > BTW: If you do a SVN update now on my tree, it should be up to date with
>> > mpsafe TTY so usb2_serial should build fine.
>>
>> What are the needed patchs in order to build usb2_sound ?
>> I use latest HDA patchs from ariff.
>
> Hi,
>
> You need the following three additional patches:
>
> ==== src/sys/dev/sound/pcm/channel.c
> @@ -570,13 +570,26 @@
> void
> chn_intr(struct pcm_channel *c)
> {
> - CHN_LOCK(c);
> + uint8_t do_unlock;
> + if (CHN_LOCK_OWNED(c)) {
> + /*
> + * Allow sound drivers to call this function with
> + * "CHN_LOCK()" locked:
> + */
> + do_unlock = 0;
> + } else {
> + do_unlock = 1;
> + CHN_LOCK(c);
> + }
> c->interrupts++;
> if (c->direction == PCMDIR_PLAY)
> chn_wrintr(c);
> else
> chn_rdintr(c);
> - CHN_UNLOCK(c);
> + if (do_unlock) {
> + CHN_UNLOCK(c);
> + }
> + return;
> }
>
> u_int32_t
> ==== src/sys/dev/sound/pcm/channel.h
> @@ -258,11 +258,13 @@
> #endif
>
> #ifdef USING_MUTEX
> +#define CHN_LOCK_OWNED(c) mtx_owned((struct mtx *)((c)->lock))
> #define CHN_LOCK(c) mtx_lock((struct mtx *)((c)->lock))
> #define CHN_UNLOCK(c) mtx_unlock((struct mtx *)((c)->lock))
> #define CHN_TRYLOCK(c) mtx_trylock((struct mtx *)((c)->lock))
> #define CHN_LOCKASSERT(c) mtx_assert((struct mtx *)((c)->lock), MA_OWNED)
> #else
> +#define CHN_LOCK_OWNED(c) 0
> #define CHN_LOCK(c)
> #define CHN_UNLOCK(c)
> #define CHN_TRYLOCK(c)
> ==== //depot/vendor/freebsd/src/sys/dev/sound/pcm/mixer.c#41 (text+ko) - //depot/projects/usb/src/sys/dev/sound/pcm/mixer.c#11 (text+ko) ==== content
> @@ -589,7 +589,7 @@
> KASSERT(m->type == MIXER_TYPE_SECONDARY,
> ("%s(): illegal mixer type=%d", __func__, m->type));
>
> - snd_mtxlock(m->lock);
> + /* mixer uninit can sleep --hps */
>
> MIXER_UNINIT(m);
>
> @@ -704,14 +704,24 @@
> return EBUSY;
> }
>
> + /* destroy dev can sleep --hps */
> +
> + snd_mtxunlock(m->lock);
> +
> pdev->si_drv1 = NULL;
> destroy_dev(pdev);
>
> + snd_mtxlock(m->lock);
> +
> for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
> mixer_set(m, i, 0);
>
> mixer_setrecsrc(m, SOUND_MASK_MIC);
>
> + snd_mtxunlock(m->lock);
> +
> + /* mixer uninit can sleep --hps */
> +
> MIXER_UNINIT(m);
>
> snd_mtxfree(m->lock);
> @@ -1280,3 +1290,16 @@
>
> return (EINVAL);
> }
> +
> +/*
> + * Allow the sound driver to use the mixer lock to protect its mixer
> + * data:
> + */
> +struct mtx *
> +mixer_get_lock(struct snd_mixer *m)
> +{
> + if (m->lock == NULL) {
> + return (&Giant);
> + }
> + return (m->lock);
> +}
> ==== src/sys/dev/sound/pcm/mixer.h
> @@ -56,6 +56,7 @@
> u_int32_t mix_getparent(struct snd_mixer *m, u_int32_t dev);
> u_int32_t mix_getchild(struct snd_mixer *m, u_int32_t dev);
> void *mix_getdevinfo(struct snd_mixer *m);
> +struct mtx *mixer_get_lock(struct snd_mixer *m);
>
> extern int mixer_count;
>
>
>
>
> --HPS
>
--
Olivier Smedts _
ASCII ribbon campaign ( )
e-mail: olivier at gid0.org - against HTML email & vCards X
www: http://www.gid0.org - against proprietary attachments / \
"Il y a seulement 10 sortes de gens dans le monde :
ceux qui comprennent le binaire,
et ceux qui ne le comprennent pas."
More information about the freebsd-usb
mailing list