Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Feb 2016 03:55:11 +0000
From:      Phabricator <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] [Closed] D5416: buf_ring/drbr: Add buf_ring_peek_clear_sc and use it in drbr_peek
Message-ID:  <3c8297a7aaed44e6fcaa9931b4842923@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-ujjgotek7ybhtamwk6ba-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-ujjgotek7ybhtamwk6ba-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_3c8297a7aaed44e6fcaa9931b4842923
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

This revision was automatically updated to reflect the committed changes.
Closed by commit rS296178: buf_ring/drbr: Add buf_ring_peek_clear_sc and use it in drbr_peek (authored by sephe).

CHANGED PRIOR TO COMMIT
  https://reviews.freebsd.org/D5416?vs=13669&id=13866#toc

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D5416?vs=13669&id=13866

REVISION DETAIL
  https://reviews.freebsd.org/D5416

AFFECTED FILES
  head/sys/net/ifq.h
  head/sys/sys/buf_ring.h

CHANGE DETAILS
  diff --git a/head/sys/sys/buf_ring.h b/head/sys/sys/buf_ring.h
  --- a/head/sys/sys/buf_ring.h
  +++ b/head/sys/sys/buf_ring.h
  @@ -268,6 +268,37 @@
   	return (br->br_ring[br->br_cons_head]);
   }
   
  +static __inline void *
  +buf_ring_peek_clear_sc(struct buf_ring *br)
  +{
  +#ifdef DEBUG_BUFRING
  +	void *ret;
  +
  +	if (!mtx_owned(br->br_lock))
  +		panic("lock not held on single consumer dequeue");
  +#endif	
  +	/*
  +	 * I believe it is safe to not have a memory barrier
  +	 * here because we control cons and tail is worst case
  +	 * a lagging indicator so we worst case we might
  +	 * return NULL immediately after a buffer has been enqueued
  +	 */
  +	if (br->br_cons_head == br->br_prod_tail)
  +		return (NULL);
  +
  +#ifdef DEBUG_BUFRING
  +	/*
  +	 * Single consumer, i.e. cons_head will not move while we are
  +	 * running, so atomic_swap_ptr() is not necessary here.
  +	 */
  +	ret = br->br_ring[br->br_cons_head];
  +	br->br_ring[br->br_cons_head] = NULL;
  +	return (ret);
  +#else
  +	return (br->br_ring[br->br_cons_head]);
  +#endif
  +}
  +
   static __inline int
   buf_ring_full(struct buf_ring *br)
   {
  diff --git a/head/sys/net/ifq.h b/head/sys/net/ifq.h
  --- a/head/sys/net/ifq.h
  +++ b/head/sys/net/ifq.h
  @@ -369,7 +369,7 @@
   		return (m);
   	}
   #endif
  -	return(buf_ring_peek(br));
  +	return(buf_ring_peek_clear_sc(br));
   }
   
   static __inline void

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: sepherosa_gmail.com, network, adrian, delphij, rrs, glebius, kmacy, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com
Cc: freebsd-net-list

--b1_3c8297a7aaed44e6fcaa9931b4842923
Content-Type: text/x-patch; charset=utf-8; name="D5416.13866.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D5416.13866.patch"

ZGlmZiAtLWdpdCBhL2hlYWQvc3lzL3N5cy9idWZfcmluZy5oIGIvaGVhZC9zeXMvc3lzL2J1Zl9y
aW5nLmgKLS0tIGEvaGVhZC9zeXMvc3lzL2J1Zl9yaW5nLmgKKysrIGIvaGVhZC9zeXMvc3lzL2J1
Zl9yaW5nLmgKQEAgLTI2OCw2ICsyNjgsMzcgQEAKIAlyZXR1cm4gKGJyLT5icl9yaW5nW2JyLT5i
cl9jb25zX2hlYWRdKTsKIH0KIAorc3RhdGljIF9faW5saW5lIHZvaWQgKgorYnVmX3JpbmdfcGVl
a19jbGVhcl9zYyhzdHJ1Y3QgYnVmX3JpbmcgKmJyKQoreworI2lmZGVmIERFQlVHX0JVRlJJTkcK
Kwl2b2lkICpyZXQ7CisKKwlpZiAoIW10eF9vd25lZChici0+YnJfbG9jaykpCisJCXBhbmljKCJs
b2NrIG5vdCBoZWxkIG9uIHNpbmdsZSBjb25zdW1lciBkZXF1ZXVlIik7CisjZW5kaWYJCisJLyoK
KwkgKiBJIGJlbGlldmUgaXQgaXMgc2FmZSB0byBub3QgaGF2ZSBhIG1lbW9yeSBiYXJyaWVyCisJ
ICogaGVyZSBiZWNhdXNlIHdlIGNvbnRyb2wgY29ucyBhbmQgdGFpbCBpcyB3b3JzdCBjYXNlCisJ
ICogYSBsYWdnaW5nIGluZGljYXRvciBzbyB3ZSB3b3JzdCBjYXNlIHdlIG1pZ2h0CisJICogcmV0
dXJuIE5VTEwgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBidWZmZXIgaGFzIGJlZW4gZW5xdWV1ZWQKKwkg
Ki8KKwlpZiAoYnItPmJyX2NvbnNfaGVhZCA9PSBici0+YnJfcHJvZF90YWlsKQorCQlyZXR1cm4g
KE5VTEwpOworCisjaWZkZWYgREVCVUdfQlVGUklORworCS8qCisJICogU2luZ2xlIGNvbnN1bWVy
LCBpLmUuIGNvbnNfaGVhZCB3aWxsIG5vdCBtb3ZlIHdoaWxlIHdlIGFyZQorCSAqIHJ1bm5pbmcs
IHNvIGF0b21pY19zd2FwX3B0cigpIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KKwkgKi8KKwlyZXQg
PSBici0+YnJfcmluZ1tici0+YnJfY29uc19oZWFkXTsKKwlici0+YnJfcmluZ1tici0+YnJfY29u
c19oZWFkXSA9IE5VTEw7CisJcmV0dXJuIChyZXQpOworI2Vsc2UKKwlyZXR1cm4gKGJyLT5icl9y
aW5nW2JyLT5icl9jb25zX2hlYWRdKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgX19pbmxpbmUgaW50
CiBidWZfcmluZ19mdWxsKHN0cnVjdCBidWZfcmluZyAqYnIpCiB7CmRpZmYgLS1naXQgYS9oZWFk
L3N5cy9uZXQvaWZxLmggYi9oZWFkL3N5cy9uZXQvaWZxLmgKLS0tIGEvaGVhZC9zeXMvbmV0L2lm
cS5oCisrKyBiL2hlYWQvc3lzL25ldC9pZnEuaApAQCAtMzY5LDcgKzM2OSw3IEBACiAJCXJldHVy
biAobSk7CiAJfQogI2VuZGlmCi0JcmV0dXJuKGJ1Zl9yaW5nX3BlZWsoYnIpKTsKKwlyZXR1cm4o
YnVmX3JpbmdfcGVla19jbGVhcl9zYyhicikpOwogfQogCiBzdGF0aWMgX19pbmxpbmUgdm9pZAoK


--b1_3c8297a7aaed44e6fcaa9931b4842923--



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