Download raw body.
Forever loop in azalia.c
On Fri, May 24, 2024 at 10:08:29AM +0000, Ali Farzanrad wrote:
> Hi tech@
>
> I found this infinite loop in azalia.c:
>
> Index: azalia.c
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/pci/azalia.c,v
> diff -u -p -r1.287 azalia.c
> --- azalia.c 17 May 2024 19:43:45 -0000 1.287
> +++ azalia.c 24 May 2024 10:03:02 -0000
> @@ -701,7 +701,7 @@ azalia_intr(void *v)
> int ret = 0;
>
> mtx_enter(&audio_lock);
> - for (;;) {
> + do {
> intsts = AZ_READ_4(az, INTSTS);
> if ((intsts & az->intctl) == 0 || intsts == 0xffffffff)
> break;
^^^^^^
There's a break condition. Furthermore, the loop is necessary: we've
to loop (process events) as long as the INTSTS register is not zero
(ie as long as there's work to do)
> @@ -722,7 +722,7 @@ azalia_intr(void *v)
> azalia_rirb_intr(az);
> ret = 1;
> }
> - }
> + } while (0);
> mtx_leave(&audio_lock);
> return (ret);
> }
>
>
> I CCed this email to everyone related to that forever loop commit.
>
>
> Bests,
> Ali Farzanrad
>
>
Forever loop in azalia.c