From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752534AbbIOXKG (ORCPT ); Tue, 15 Sep 2015 19:10:06 -0400 Received: from p3plsmtps2ded03.prod.phx3.secureserver.net ([208.109.80.60]:60701 "EHLO p3plsmtps2ded03.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752228AbbIOXKD (ORCPT ); Tue, 15 Sep 2015 19:10:03 -0400 x-originating-ip: 72.167.245.219 From: "K. Y. Srinivasan" To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, vkuznets@redhat.com, jasowang@redhat.com Cc: "K. Y. Srinivasan" Subject: [PATCH 2/5] hv: add helpers to handle hv_util device state Date: Tue, 15 Sep 2015 17:37:51 -0700 Message-Id: <1442363874-22508-2-git-send-email-kys@microsoft.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1442363874-22508-1-git-send-email-kys@microsoft.com> References: <1442363823-22428-1-git-send-email-kys@microsoft.com> <1442363874-22508-1-git-send-email-kys@microsoft.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Olaf Hering The callbacks in kvp, vss and fcopy code are called both from the main thread as well as from interrupt context. If a state change is done by the main thread it is not immediately seen by the interrupt. As a result the state machine gets out of sync. Force propagation of state changes via get/set helpers with a memory barrier. Signed-off-by: Olaf Hering Signed-off-by: K. Y. Srinivasan --- drivers/hv/hyperv_vmbus.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h index 4b1eb6d..dee5798 100644 --- a/drivers/hv/hyperv_vmbus.h +++ b/drivers/hv/hyperv_vmbus.h @@ -780,4 +780,18 @@ enum hvutil_device_state { HVUTIL_DEVICE_DYING, /* driver unload is in progress */ }; +static inline void hvutil_device_set_state(enum hvutil_device_state *p, + enum hvutil_device_state s) +{ + *p = s; + wmb(); +} + +static inline enum hvutil_device_state +hvutil_device_get_state(enum hvutil_device_state *p) +{ + rmb(); + return *p; +} + #endif /* _HYPERV_VMBUS_H */ -- 1.7.4.1