Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752136AbcLCSj6 (ORCPT ); Sat, 3 Dec 2016 13:39:58 -0500 Received: from p3plsmtps2ded03.prod.phx3.secureserver.net ([208.109.80.60]:34902 "EHLO p3plsmtps2ded03.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751638AbcLCSjr (ORCPT ); Sat, 3 Dec 2016 13:39:47 -0500 x-originating-ip: 72.167.245.219 From: kys@exchange.microsoft.com To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, vkuznets@redhat.com, jasowang@redhat.com, leann.ogasawara@canonical.com Cc: "K. Y. Srinivasan" Subject: [PATCH V2 04/15] Drivers: hv: vmbus: Enhance the rescind callback functionality Date: Sat, 3 Dec 2016 12:34:31 -0800 Message-Id: <1480797282-10126-4-git-send-email-kys@exchange.microsoft.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1480797282-10126-1-git-send-email-kys@exchange.microsoft.com> References: <1480797239-10085-1-git-send-email-kys@exchange.microsoft.com> <1480797282-10126-1-git-send-email-kys@exchange.microsoft.com> Reply-To: kys@microsoft.com X-CMAE-Envelope: MS4wfFjUKTXKFyszlb4JSGAg3PcKN1RhRvbUQGSUwp9lKiu1dYC0XJS1mUTD3q2Y+3/yBddrn1JLlw2eh8yhfXGTRGfjXSDd0nQJW0xi6UY1Ev1wKG8bPdcY G7ahRjaMJmsfUfrGtjrBXgEPkoe10LKLzb+vLw7db8BxjWh6QrdNAXZBtz/cpk3fYTy6/XLkeip4fe0VIw43CwuM3zuORERqUIpJczrgpibaeG6T5gTz1dcg Bc+s0qCImVy3/Z4yv2vZgsgugdRvQ/6GQr9Vztl+IXaNWiasyc0sjWcfFztWW+si+deiDlIjnZA1n1fi6OqAn6P1qghaVJAeG/Q/RECUuUepkGHohWj1ed2h ow2aevtnhxFCkbKhB7e3V0VvwVtcGi5wQwNbowjfN1YBcf77ssaAgk2NDtyIPiSkSY7uu8TWnhiomJT3BA4K0xBFvPEMkhkFPYtW7VOK15Yi+Vwf1f8= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2704 Lines: 69 From: K. Y. Srinivasan Enhance the rescind callback functionality by permitting the passing of an opaque pointer. This functionality will be used by vmbus device drivers to implement rescind related cleanup more efficiently. Signed-off-by: K. Y. Srinivasan --- drivers/hv/channel_mgmt.c | 11 +++++++---- include/linux/hyperv.h | 7 ++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index f9c5827..d83c1ac 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -825,8 +825,10 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr) if (channel->device_obj) { if (channel->chn_rescind_callback) { - channel->chn_rescind_callback(channel); - goto out; + channel->chn_rescind_callback(channel, + channel->rescind_arg); + if (is_hvsock_channel(channel)) + goto out; } /* * We will have to unregister this device from the @@ -1215,9 +1217,10 @@ bool vmbus_are_subchannels_present(struct vmbus_channel *primary) } EXPORT_SYMBOL_GPL(vmbus_are_subchannels_present); -void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, - void (*chn_rescind_cb)(struct vmbus_channel *)) +void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, void *arg, + void (*chn_rescind_cb)(struct vmbus_channel *, void *)) { channel->chn_rescind_callback = chn_rescind_cb; + channel->rescind_arg = arg; } EXPORT_SYMBOL_GPL(vmbus_set_chn_rescind_callback); diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 35053f9..a9a0ce4 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -800,7 +800,8 @@ struct vmbus_channel { * Channel rescind callback. Some channels (the hvsock ones), need to * register a callback which is invoked in vmbus_onoffer_rescind(). */ - void (*chn_rescind_callback)(struct vmbus_channel *channel); + void (*chn_rescind_callback)(struct vmbus_channel *channel, void *arg); + void *rescind_arg; /* * The spinlock to protect the structure. It is being used to protect @@ -957,8 +958,8 @@ static inline void clear_low_latency_mode(struct vmbus_channel *c) void vmbus_set_sc_create_callback(struct vmbus_channel *primary_channel, void (*sc_cr_cb)(struct vmbus_channel *new_sc)); -void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, - void (*chn_rescind_cb)(struct vmbus_channel *)); +void vmbus_set_chn_rescind_callback(struct vmbus_channel *channel, void *arg, + void (*chn_rescind_cb)(struct vmbus_channel *, void *)); /* * Retrieve the (sub) channel on which to send an outgoing request. -- 1.7.4.1