Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965478AbbBEPw5 (ORCPT ); Thu, 5 Feb 2015 10:52:57 -0500 Received: from mail-bl2on0103.outbound.protection.outlook.com ([65.55.169.103]:11703 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755960AbbBEPw4 convert rfc822-to-8bit (ORCPT ); Thu, 5 Feb 2015 10:52:56 -0500 From: KY Srinivasan To: Vitaly Kuznetsov CC: "devel@linuxdriverproject.org" , "Haiyang Zhang" , "linux-kernel@vger.kernel.org" , Dexuan Cui , Jason Wang Subject: RE: [PATCH 0/4] Drivers: hv: Further protection for the rescind path Thread-Topic: [PATCH 0/4] Drivers: hv: Further protection for the rescind path Thread-Index: AQHQQSvuY4uwgwARLkGlnqLyl2EfhpziNGLg Date: Thu, 5 Feb 2015 15:52:53 +0000 Message-ID: References: <1422982839-3948-1-git-send-email-vkuznets@redhat.com> <87r3u4r7nd.fsf@vitty.brq.redhat.com> In-Reply-To: <87r3u4r7nd.fsf@vitty.brq.redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [2601:8:9b00:fd:b832:49d4:8b93:7e23] authentication-results: redhat.com; dkim=none (message not signed) header.d=none; x-microsoft-antispam: BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB0773; x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB0773; x-forefront-prvs: 0478C23FE0 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(6009001)(13464003)(41574002)(377454003)(52604005)(51704005)(99286002)(40100003)(76176999)(74316001)(33656002)(86362001)(122556002)(86612001)(87936001)(2656002)(46102003)(19580405001)(54356999)(106116001)(110136001)(50986999)(19580395003)(2950100001)(92566002)(2900100001)(102836002)(62966003)(77156002)(76576001)(3826002);DIR:OUT;SFP:1102;SCL:1;SRVR:BY2PR0301MB0773;H:BY2PR0301MB0711.namprd03.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-OriginatorOrg: microsoft.onmicrosoft.com X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Feb 2015 15:52:53.3657 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB0773 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4872 Lines: 100 > -----Original Message----- > From: Vitaly Kuznetsov [mailto:vkuznets@redhat.com] > Sent: Thursday, February 5, 2015 2:10 AM > To: KY Srinivasan > Cc: devel@linuxdriverproject.org; Haiyang Zhang; linux- > kernel@vger.kernel.org; Dexuan Cui; Jason Wang > Subject: Re: [PATCH 0/4] Drivers: hv: Further protection for the rescind path > > KY Srinivasan writes: > > >> -----Original Message----- > >> From: Vitaly Kuznetsov [mailto:vkuznets@redhat.com] > >> Sent: Tuesday, February 3, 2015 9:01 AM > >> To: KY Srinivasan; devel@linuxdriverproject.org > >> Cc: Haiyang Zhang; linux-kernel@vger.kernel.org; Dexuan Cui; Jason > >> Wang > >> Subject: [PATCH 0/4] Drivers: hv: Further protection for the rescind > >> path > >> > >> This series is a continuation of the "Drivers: hv: vmbus: serialize > >> Offer and Rescind offer". I'm trying to address a number of > >> theoretically possible issues with rescind offer handling. All these > >> complications come from the fact that a rescind offer results in > >> vmbus channel being freed and we must ensure nobody still uses it. > >> Instead of introducing new locks I suggest we switch channels usage to > the get/put workflow. > >> > >> The main part of the series is [PATCH 1/4] which introduces the > >> workflow for vmbus channels, all other patches fix different corner > >> cases using this workflow. I'm not sure all such cases are covered > >> with this series (probably not), but in case protection is required > >> in some other places it should become relatively easy to add one. > >> > >> I did some sanity testing with CONFIG_DEBUG_LOCKDEP=y and nothing > >> popped out, however, additional testing would be much appreciated. > >> > >> K.Y., Haiyang, I'm not sending this series to netdev@ and linux-scsi@ > >> as it is supposed to be applied as a whole, please resend these > >> patches with your sign-offs when (and if) we're done with reviews. > Thanks! > > > > Vitaly, > > > > Thanks for looking into this issue. While today, rescind offer results > > in the freeing of the channel, I don't think that is required. By not > > freeing up the channel in the rescind path, we can have a safe way to > > access the channel and that does not have to involve taking a > > reference on the channel every time you access it - the get/put > > workflow in your patch set. As part of the network performance > > improvement work, I had eliminated all locks in the receive path by setting > up per-cpu data structures for mapping the relid to channel etc. These set of > patches introduces locking/atomic operations in performance critical code > paths to deal with an event that is truly rare - the channel getting rescinded. > > It is possible to eliminate all locks/atomic operations from performance > critical pyth in my patch series by following Dexuan's suggestion - we'll get > the channel in vmbus_open and put it in vmbus_close (and on processing > offer/rescind offer) this won't affect performance. I'm in the middle of > testing this approach. > > > > > All channel messages are handled in a single work context: > > > > vmbus_on_msg_dpc() -> vmbus_onmessage_work()-> Various channel > > messages [offer, rescind etc.] > > > > So, the rescind message cannot be processed while we are processing > > the offer message and since an offer cannot be rescinded before it is > > offered, offer and rescind are naturally serialized (I think I have > > patchset in my queue from you that is trying to solve the concurrent > execution of offer and rescind and looking at the code I cannot see how this > can occur). > > > > As part of handling the rescind message, we will just set the channel > > state to indicate that the offer is rescinded (we can add the rescind state to > the channel states already defined and this will be done under the protection > of the channel lock). > > The cleanup of the channel and sending of the RELID release message > > will only be done in the context of the driver as part of driver > > remove function. I think this should be doable in a way that does not > penalize the normal path. If it is ok with you, I will try to put together a patch > along the lines I have described here. > > > > Yes, if we consider rescind event as a very rare event we can avoid freeing > channels, but if (in some conditions) it happens frequently we'll have > significant memory leakage. > Rescind offer is rare; but I am not suggesting that we would leak memory in this case. What I am suggesting is that we can place the burden where it should be - do all the cleanup in vmbus_close() driven by the remove function. K. Y -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/