Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Feb 2007 21:58:30 GMT
From:      "Christian S.J. Peron" <csjp@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 113921 for review
Message-ID:  <200702022158.l12LwUYo023871@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=113921

Change 113921 by csjp@csjp_rnd01 on 2007/02/02 21:58:07

	- Drop the Giant requirement for the system calls
	- Fix a problem which resulted in select(2)/poll(2) waking up
	  constantly indicating that the file descriptor was ready to
	  read.  This occured because the old old simply looked at the
	  size of the hold buffer and used that to indicate that there
	  was data ready to read. In the old world order we used set
	  the hold buffer length to 0 after bpf_uiomove() returned.
	
	  In the zero copy world, we tell the kernel we are done with
	  the buffer by incrementing the user generation number, leaving
	  the hold buffer length un-touched.
	
	  This change basically looks to see if the user and kernel
	  generation numbers are different, and if so, wakes up the
	  reader

Affected files ...

.. //depot/projects/zcopybpf/src/sys/net/bpf.c#10 edit

Differences ...

==== //depot/projects/zcopybpf/src/sys/net/bpf.c#10 (text+ko) ====

@@ -141,7 +141,6 @@
 
 static struct cdevsw bpf_cdevsw = {
 	.d_version =	D_VERSION,
-	.d_flags =	D_NEEDGIANT,
 	.d_open =	bpfopen,
 	.d_close =	bpfclose,
 	.d_read =	bpfread,
@@ -809,7 +808,7 @@
 	// printf("bpf_ready: hlen: %d, immediate %d, state %d, slen %d\n",
 	//     d->bd_hlen, d->bd_immediate, d->bd_state, d->bd_slen);
 
-	if (d->bd_hlen != 0)
+	if (!bpf_buffree(d) && d->bd_hlen != 0)
 		return (1);
 	if ((d->bd_immediate || d->bd_state == BPF_TIMED_OUT) &&
 	    d->bd_slen != 0)



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