Patch for Linux Futexes

Chagin Dmitry dchagin at freebsd.org
Thu May 22 18:23:54 UTC 2014


On Thu, May 22, 2014 at 01:06:22PM +0200, Hans Petter Selasky wrote:
> Hi,
> 
> When using the Linux Skype client under FreeBSD I sometimes see that the 
> Audio disappears in the one direction. When I check "ps auxw" I see 
> skype is stuck on a so-called Futex. I looked into the Linux futex code 
> and see that wakeup_one() is used instead of wakeup(). Maybe others can 
> test too and verify if replacing wakeup_one() by wakeup() makes any 
> difference in for Linux applications using Futexes.
> 

generally speaking the patch is not correct as futex_wake() should
wakeup n waiters which is specified by user space. and i think that
futex_wake() is correct.
so we must take a close look at futex_requeue() and FUTEX_WAKE_OP.


> --HPS
> 
> 
> > diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c
> > index 9b4c92f..e893bf4 100644
> > --- a/sys/compat/linux/linux_futex.c
> > +++ b/sys/compat/linux/linux_futex.c
> > @@ -498,7 +498,7 @@ futex_wake(struct futex *f, int n, uint32_t bitset)
> >  		wp->wp_flags |= FUTEX_WP_REMOVED;
> >  		TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list);
> >  		LIN_SDT_PROBE1(futex, futex_wake, wakeup, wp);
> > -		wakeup_one(wp);
> > +		wakeup(wp);
> >  		if (++count == n)
> >  			break;
> >  	}
> > @@ -525,7 +525,7 @@ futex_requeue(struct futex *f, int n, struct futex *f2, int n2)
> >  			wp->wp_flags |= FUTEX_WP_REMOVED;
> >  			TAILQ_REMOVE(&f->f_waiting_proc, wp, wp_list);
> >  			LIN_SDT_PROBE1(futex, futex_requeue, wakeup, wp);
> > -			wakeup_one(wp);
> > +			wakeup(wp);
> >  		} else {
> >  			LIN_SDT_PROBE3(futex, futex_requeue, requeue,
> >  			    f->f_uaddr, wp, f2->f_uaddr);
> 
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"

-- 
Have fun!
chd
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-multimedia/attachments/20140522/83c73014/attachment.sig>


More information about the freebsd-multimedia mailing list