From patchwork Mon Mar 20 20:28:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 741159 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vn6xx5sP3z9rvt for ; Tue, 21 Mar 2017 07:29:57 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="C1Cy4aki"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932455AbdCTU3R (ORCPT ); Mon, 20 Mar 2017 16:29:17 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:36300 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932252AbdCTU2X (ORCPT ); Mon, 20 Mar 2017 16:28:23 -0400 Received: by mail-pf0-f176.google.com with SMTP id o126so70546718pfb.3 for ; Mon, 20 Mar 2017 13:28:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pP1JhMolSPVnfTEOOzjS+gGtEGbAFU3awTojDbMkMec=; b=C1Cy4akind6wN29yISeeQqHH6aL0/Q53vm80DQtJxHLA+mKOAgbpSyfrB7mxMbqFc2 jPw3Faw3hrilH7C54VONBaZ68FBiLkZbRfYwKDtVYqjv5P9vOw0E4nuIy6gfpy3MX3Lr 2lbgAQBzInnUAxl8W2hA+gA7+YHvgEZRLwKTi5u8LcGw15Y3RCtRgFOAW9B3NgNmjY8Y FRzWNXwBbX7vy/x640KI0QFp0JJazKL/DIdmwR69H16nxvrUcMMHDdXB7jsN7/rby/Ln S3KunRGZUTDr3dlttm1ZKAzMgk3N6lgSsN0k5CNp8v6Am6CXOXyFBiu8fFIJua8ASm9S MxMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pP1JhMolSPVnfTEOOzjS+gGtEGbAFU3awTojDbMkMec=; b=kfeDs3VkW5XzrHPogudkBT7t4Rihk+dfzOLgyy6QsXProEHb+V/QtwfpjY9+GnQ4kV UFMmdIgj1W3JPrHJ1suAIAjHABJkh+4fGK/thTucnYQHfI35Zuyk1uCk9jV75mZJBzwf NIAHG7biJIFHkaQWPVNIWZJkic2VlvZezIjZJc3oVhA9tvkGXd6jUTXzklaGncBdOVC6 KqqPt3QQMBDfSq2xriDIkygb4ILhuS620im4qp7CST7u/vY1I/9arJobzTTXydHUBHhx vlS9NuU83iuuNlEp9G9peDkkdFm0xO8I++W4JPh6UkPC2w6IA/10cBN0JdsVzIH/+waw afnw== X-Gm-Message-State: AFeK/H0p8rAAdVv1FY7uck17N+dMwAI6/Tbh9c6QZae6e1biw0+NV+vqmmy455ts0e/ltQ== X-Received: by 10.98.78.7 with SMTP id c7mr34889523pfb.138.1490041695345; Mon, 20 Mar 2017 13:28:15 -0700 (PDT) Received: from xeon-e3.wavecable.com (204-195-18-65.wavecable.com. [204.195.18.65]) by smtp.gmail.com with ESMTPSA id i3sm34930643pfg.117.2017.03.20.13.28.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Mar 2017 13:28:14 -0700 (PDT) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, davem@davemloft.net Cc: haiyangz@microsoft.com, netdev@vger.kernel.org, Stephen Hemminger Subject: [PATCH net-next 2/2] vmbus: no longer expose iterator internals Date: Mon, 20 Mar 2017 13:28:05 -0700 Message-Id: <20170320202805.19362-3-sthemmin@microsoft.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170320202805.19362-1-sthemmin@microsoft.com> References: <20170320202805.19362-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since NAPI no longer needs to jump out of iterator early, no need to expose the internal iterator steps. Signed-off-by: Stephen Hemminger --- drivers/hv/ring_buffer.c | 51 ++++++++++++++++++++++++------------------------ include/linux/hyperv.h | 22 +-------------------- 2 files changed, 27 insertions(+), 46 deletions(-) diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index c3f1a9e33cef..280e2010913f 100644 --- a/drivers/hv/ring_buffer.c +++ b/drivers/hv/ring_buffer.c @@ -458,13 +458,31 @@ struct vmpacket_descriptor *hv_pkt_iter_first(struct vmbus_channel *channel) EXPORT_SYMBOL_GPL(hv_pkt_iter_first); /* + * Update host ring buffer after iterating over packets. + */ +static void hv_pkt_iter_close(struct vmbus_channel *channel) +{ + struct hv_ring_buffer_info *rbi = &channel->inbound; + + /* + * Make sure all reads are done before we update the read index since + * the writer may start writing to the read area once the read index + * is updated. + */ + virt_rmb(); + rbi->ring_buffer->read_index = rbi->priv_read_index; + + hv_signal_on_read(channel); +} + +/* * Get next vmbus packet from ring buffer. * * Advances the current location (priv_read_index) and checks for more - * data. If the end of the ring buffer is reached, then return NULL. + * data. If at end of list, return NULL and update host. */ struct vmpacket_descriptor * -__hv_pkt_iter_next(struct vmbus_channel *channel, +hv_pkt_iter_next(struct vmbus_channel *channel, const struct vmpacket_descriptor *desc) { struct hv_ring_buffer_info *rbi = &channel->inbound; @@ -476,29 +494,12 @@ __hv_pkt_iter_next(struct vmbus_channel *channel, if (rbi->priv_read_index >= dsize) rbi->priv_read_index -= dsize; - /* more data? */ - if (hv_pkt_iter_avail(rbi) < sizeof(struct vmpacket_descriptor)) + /* if no more data? */ + if (hv_pkt_iter_avail(rbi) < sizeof(struct vmpacket_descriptor)) { + hv_pkt_iter_close(channel); return NULL; - else - return hv_get_ring_buffer(rbi) + rbi->priv_read_index; -} -EXPORT_SYMBOL_GPL(__hv_pkt_iter_next); - -/* - * Update host ring buffer after iterating over packets. - */ -void hv_pkt_iter_close(struct vmbus_channel *channel) -{ - struct hv_ring_buffer_info *rbi = &channel->inbound; - - /* - * Make sure all reads are done before we update the read index since - * the writer may start writing to the read area once the read index - * is updated. - */ - virt_rmb(); - rbi->ring_buffer->read_index = rbi->priv_read_index; + } - hv_signal_on_read(channel); + return hv_get_ring_buffer(rbi) + rbi->priv_read_index; } -EXPORT_SYMBOL_GPL(hv_pkt_iter_close); +EXPORT_SYMBOL_GPL(hv_pkt_iter_next); diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 36162485d663..7df6ab5b3067 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -1550,32 +1550,12 @@ static inline u32 hv_pkt_datalen(const struct vmpacket_descriptor *desc) return (desc->len8 << 3) - (desc->offset8 << 3); } - struct vmpacket_descriptor * hv_pkt_iter_first(struct vmbus_channel *channel); struct vmpacket_descriptor * -__hv_pkt_iter_next(struct vmbus_channel *channel, - const struct vmpacket_descriptor *pkt); - -void hv_pkt_iter_close(struct vmbus_channel *channel); - -/* - * Get next packet descriptor from iterator - * If at end of list, return NULL and update host. - */ -static inline struct vmpacket_descriptor * hv_pkt_iter_next(struct vmbus_channel *channel, - const struct vmpacket_descriptor *pkt) -{ - struct vmpacket_descriptor *nxt; - - nxt = __hv_pkt_iter_next(channel, pkt); - if (!nxt) - hv_pkt_iter_close(channel); - - return nxt; -} + const struct vmpacket_descriptor *pkt); #define foreach_vmbus_pkt(pkt, channel) \ for (pkt = hv_pkt_iter_first(channel); pkt; \