From owner-freebsd-net@freebsd.org Mon Feb 29 03:55:11 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 22C74AB6EB5 for ; Mon, 29 Feb 2016 03:55:11 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id 0CD911C38 for ; Mon, 29 Feb 2016 03:55:11 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 099633321060; Mon, 29 Feb 2016 03:55:11 +0000 (UTC) Date: Mon, 29 Feb 2016 03:55:11 +0000 To: freebsd-net@freebsd.org From: Phabricator Reply-to: D5416+325+d90172de5c58ed8c@reviews.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> X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , Thread-Topic: D5416: buf_ring/drbr: Add buf_ring_peek_clear_sc and use it in drbr_peek X-Herald-Rules: none X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: Precedence: bulk In-Reply-To: References: Thread-Index: Mjg4YWY1NmZjMjNkYWVhODFjM2QxMWJiNjA5IFbTwR8= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_3c8297a7aaed44e6fcaa9931b4842923" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Feb 2016 03:55:11 -0000 --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--