From patchwork Wed May 17 14:57:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anshul Makkar X-Patchwork-Id: 9731365 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0BE1260363 for ; Wed, 17 May 2017 14:59:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9D0228798 for ; Wed, 17 May 2017 14:59:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DDF5B287AB; Wed, 17 May 2017 14:59:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E9F6C28798 for ; Wed, 17 May 2017 14:59:53 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dB0OL-0003mA-7j; Wed, 17 May 2017 14:57:33 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dB0OJ-0003m4-Dh for xen-devel@lists.xen.org; Wed, 17 May 2017 14:57:31 +0000 Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id 49/6C-02181-AD46C195; Wed, 17 May 2017 14:57:30 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmphkeJIrShJLcpLzFFi42JxWrrBXvdWiky kwdoLfBZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8bJX3tZCjbxVNxd94e5gfEVRxcjJ4eEgL/E sZZPLCA2m4CexJFbf9hBbBEBWYnVXXOAbA4OZoFMifaLkSBhYQFfiW3PZrKB2CwCqhJPX10HK +cV8JDY8e0MG8RIOYmb5zqZQWxmAU+JE1fOgNUwChhIfLg4hxHEFgLq7X12iAmiV1Di5MwnLB D1EhIHX7xgnsDIOwtJahaS1AJGplWMGsWpRWWpRbrGBnpJRZnpGSW5iZk5uoYGpnq5qcXFiem pOYlJxXrJ+bmbGIGhU8/AwLiDccIqv0OMkhxMSqK8+x9IRwrxJeWnVGYkFmfEF5XmpBYfYpTh 4FCS4P2QLBMpJFiUmp5akZaZAwximLQEB4+SCO89kDRvcUFibnFmOkTqFKOilDhEQgAkkVGaB 9cGi5xLjLJSwryMDAwMQjwFqUW5mSWo8q8YxTkYlYR5H4NM4cnMK4Gb/gpoMRPQ4maQm3mLSx IRUlINjJw7GS+fkZ7S1OL/N/TUAtlY0wWHV1+/+T314+zH8Yzf+L8Fn9h70XjJwZ2LpA4/Vwq 4WsX1s0vi5SORxcVrWhPnNXu93NjR7Zy7KGVmxqTrfistDh2vu10hwqHTnn1vR8l+o48zXzWn dji6yuebsiy9y5V5bOXLXpttyYeEHSoElHTFhT/ZblRiKc5INNRiLipOBABKMvLslwIAAA== X-Env-Sender: prvs=303526000=anshul.makkar@citrix.com X-Msg-Ref: server-10.tower-206.messagelabs.com!1495033048!77453077!1 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 12200 invoked from network); 17 May 2017 14:57:29 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 17 May 2017 14:57:29 -0000 X-IronPort-AV: E=Sophos;i="5.38,354,1491264000"; d="scan'208";a="432835415" From: Anshul Makkar To: Date: Wed, 17 May 2017 15:57:26 +0100 Message-ID: <1495033046-16427-1-git-send-email-anshul.makkar@citrix.com> X-Mailer: git-send-email 2.7.4 Commit: e3c8a91e51ee0e71a15792870ce3a123ac122b16 Mon Sep 17 00:00:00 2001 Author: Anshul Makkar MIME-Version: 1.0 Cc: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, jbeulich@suse.com, andrew.cooper3@citrix.com Subject: [Xen-devel] [PATCH] XenBus: Don't wait for producer to fill the ring if the ring X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP The condition to check for if there is space in the ring buffer also becomes true if the buffer is full, thus consumer waits for the producer to fill the buffer eventhough it is already full. To resolve the situation, check if the buffer is full and then break from the loop. e.g case: prod = 1272, cons = 248. Signed-off-by: Anshul Makkar --- tools/firmware/hvmloader/xenbus.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/firmware/hvmloader/xenbus.c b/tools/firmware/hvmloader/xenbus.c index 448157d..f8fd730 100644 --- a/tools/firmware/hvmloader/xenbus.c +++ b/tools/firmware/hvmloader/xenbus.c @@ -141,7 +141,18 @@ static void ring_read(char *data, uint32_t len) /* Don't overrun the producer pointer */ while ( (part = MASK_XENSTORE_IDX(rings->rsp_prod - rings->rsp_cons)) == 0 ) + { + /* don't wait for producer to fill the ring if it is already full. + * Condition happens when you write string > 1K into the ring. + * eg case prod=1272 cons=248. + */ + if ( !(XENSTORE_RING_SIZE - (rings->rsp_prod - rings->rsp_cons)) ) + { + part = XENSTORE_RING_SIZE; + break; + } ring_wait(); + } /* Don't overrun the end of the ring */ if ( part > (XENSTORE_RING_SIZE - MASK_XENSTORE_IDX(rings->rsp_cons)) ) part = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX(rings->rsp_cons);