Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755287AbbG3KST (ORCPT ); Thu, 30 Jul 2015 06:18:19 -0400 Received: from mail-bl2on0105.outbound.protection.outlook.com ([65.55.169.105]:5092 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754509AbbG3KSN convert rfc822-to-8bit (ORCPT ); Thu, 30 Jul 2015 06:18:13 -0400 Authentication-Results: spf=pass (sender IP is 206.191.229.116) smtp.mailfrom=microsoft.com; davemloft.net; dkim=none (message not signed) header.d=none; From: Dexuan Cui To: David Miller , KY Srinivasan CC: "gregkh@linuxfoundation.org" , "stephen@networkplumber.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "driverdev-devel@linuxdriverproject.org" , "olaf@aepfle.de" , "apw@canonical.com" , "jasowang@redhat.com" , "pebolle@tiscali.nl" , "stefanha@redhat.com" , "vkuznets@redhat.com" , "dan.carpenter@oracle.com" Subject: RE: [PATCH V4 7/7] Drivers: hv: vmbus: disable local interrupt when hvsock's callback is running Thread-Topic: [PATCH V4 7/7] Drivers: hv: vmbus: disable local interrupt when hvsock's callback is running Thread-Index: AQHQyk3ddXTrGmv8GkSSadcGzzqxlJ3zj6mQ Date: Thu, 30 Jul 2015 10:18:04 +0000 Message-ID: <77fb17eab5474ee7bf34bb1c148b84ea@SIXPR30MB031.064d.mgd.msft.net> References: <1438086930-19483-1-git-send-email-decui@microsoft.com> <20150729.152809.1531386671239230150.davem@davemloft.net> In-Reply-To: <20150729.152809.1531386671239230150.davem@davemloft.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [141.251.58.4] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD026;1:ZtBWrPBQd0WoZY94gJCwF4QqbS1Cbp6n1JAIRiTHS3Cs+CIwZHwfxkvDDbsfwE9QOW6TU8jbd7Rug8pV7KJ3BhWI5A6/5Fd/QyTHqksUetX7cZpVAPi+SS4koO9LTX4cAhBCZbjNbby1gXThfp5ixvv7cPBIS2C6WneOsiStnYUBM/q0OGBPLIl0TQVlm4mXo0ANh0h7yeAFah/cVwPXJqDTkJQf9gKEwYiNWfXinKywmos4qkA69vi6hl/bvC2kS5NIJLnuorreyJp+c1DkRQ== X-Forefront-Antispam-Report: CIP:206.191.229.116;CTRY:US;IPV:CAL;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(438002)(164054003)(189002)(199003)(106116001)(10090500001)(5001960100002)(4001450100002)(5003600100002)(2900100001)(92566002)(5001770100001)(106466001)(24736003)(102836002)(62966003)(77156002)(33646002)(86146001)(189998001)(2561002)(2950100001)(108616004)(19580405001)(87936001)(19580395003)(6806004)(16796002)(46406003)(97756001)(66066001)(46102003)(47776003)(2656002)(23726002)(86362001)(50986999)(76176999)(54356999)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR0301MB0751;H:064-smtp-out.microsoft.com;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0751;2:d1pCEVMu06Dn0K+PoRBi306Cz2A8xcSsofx/UzdGufSTtN/9h5DmuXkahl0qg7vBEkS+feqIzKwcLBKpYMsmUvDJXW3MkMFS5RuFdGwz08wyLk5YoeTyJ3oD+kV12gzom+PW5nxHij1inWy4QDYEYOQJ0KsgDyB5zAg+0AuayFk=;3:PaqelQADugOgFoGXvyEVx8CCwaqXXwebcCYM8ge9kR4WnCPbnKaLgmUfr0I2fcD9faJAnoRG1bxOhNCJee4rifg0TBec7UPCc33+j+6lthzHbUJM3AnFczcuxs5kLNTHkNeEx7fk4Ih27ra55ZENx1QNdvzTRHaUMilz9ysUMIlQrIybhCCpbJnp3nSqUhgiPby0ksWEWueOslhPg+EMoZDgoKSxVBtoqbmYZ+aoWGHmZ2stM7XXpS47DcpgOUK5;25:7W3fQHet+NH5U/jCXEmDwzzljfjdLMzAngr0Cp8JxiMyJU7cvVsch7P6003Nuy/D0WupnAiMqnnCAck/sQBEHcjDULSFKBf5zLEZ2d3jjkDHlzY8cEKDgRa/s/FUiQRV6p+Gb+K1kpOcVKNfQnVeb7TCQ7Dt8sQXoocTA7FRxMIo6uNVS1UjEMy9bEGr1xNVBCyq2NwedkXMQHicTz2o0lK2xNRjbqKTS5SxND4S5QkLqwRa/wDZeI3HBM+01+Mq+bzY6T+WlGbe627iJ7Xdhw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0751; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0751;20:OLXsgkFa6coCH9+s4Ya0+38JmY1PDN6p6mcCcRvemEXxzNIIn5JrkLlHcF3CI1yjm6VppXX/dVGW7W0/Qkmg4Au8DoqBah7X6Q1i4Wpd339d8tXr+5ua/gUnYdhS5gska7YapuQY97wIgd8rnddqthxcx08U0uJkL45LAldzWtD81Y4CY2HsyvsGl9LXSt7y46TTBEn819jelDzDzQXus4XSgWB56CWiQpqiVworl8NmSxsF/S2KInDslPpyKNRpJY65EB9I1u8hdlahnZTyuzybXpqq/DDwr4h/4M+FtwVFblYyrvRnRN2QIjBNP/2L4RVtI0MgdeHisz69Jh/NHlsI1myVmTnRwY3TM80V4UpoEiCTrBDswUhTIRZoy52ZjfpvEGmDGa8M5cfpdbtUUn2GLJ6SLjYiGlAO4Dc0+cm4ToNPOA7jbtG/lgeyLliPG07WVOnZYeS2j28IV3nPkFZ4rc5FpSYf+sFuDpVPAcpzAdZnS6pC4g4J52Raa3QJ;4:qUdTE4cI8jWdrS+rfvbaJ7MdCSrCAF/LqKu5W9IbMiYCfaA59lk7taTCawtOwFU9pmQGwerYSjtsVn8bzQbz6cPkDNe+sp2zjr+GEYjTj08FogLKrX657oOAZy414nYSASrG6mkJwQJQCJguzJD0MQVgMpq5R78Xbch74WJnNxe/ONqmCjHtZ95gElD9XS25P0eFvih3oh5uF79cMVyB/UXN9LOzPwcKN6UXxTDceOaAzqn8Uq8lJ8N9z+D4ekt0tlxYlKKUc7XmfqOCqzCtm4SxW8I37H5f2Q8gXT7Tw0te3aDIYEZY7Xsco+WBWNLd DM2PR0301MB0751: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(108003899814671); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401001)(5005006)(3002001);SRVR:DM2PR0301MB0751;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0751; X-Forefront-PRVS: 06530126A4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0751;23:6d8ak/XdxK2EDSXDWXoI+EmVyIg6L2luZp8tVca?= =?us-ascii?Q?qVMhq4p6Kym3WmYqSf7s2qv1m3wjEQjhZGGDu9qMVyPbjWYLiO44zABAdr80?= =?us-ascii?Q?7kxE7hOacmYbl1C2k6n6+j+G2YD9ecf+uPOSkR1iXsZvXjDRgjwUYLbFl+bZ?= =?us-ascii?Q?8Jwi3tVMzHhQx5PkrMJcFOeY9oWJVxwl5+o0sBFjliFoE0LijWCdOfznj7rM?= =?us-ascii?Q?zSEy3ykTpt/us6cnpgPVDpR1WuksBWAi58K0Lv3y1qAbmz7neAidhZi3jT7k?= =?us-ascii?Q?L94TVGrTNRruxhWspOuCiY1meZfxsE0JVURJ1Gg0MTpYhbx+5jSlFOir726B?= =?us-ascii?Q?3nZZ7Vj6GnHbndJUnRGgxiSknddL1kqRy3qe9xJr4Re6g2dug1x7tGDhljcC?= =?us-ascii?Q?FJ4RKt4LDb/xSvRmPcaOvPWB9YkxASo4tHy1dLPPXDy5QLWEoN4h0kad8pja?= =?us-ascii?Q?45wckc8xCyWc2BPalyEZd2pd77XtnrS0pFG7bNEuomU9rzYhjQ/9o/0Sz+JT?= =?us-ascii?Q?VF2A7kxydqLDnVgbeJE+pJsKXLS4ZeVt05I+Z7MEYUOawFKFJGffC9zHudUi?= =?us-ascii?Q?D/kHGzeE/ypIYiqwSy2kDuxXPPVhgHCcfhmk2aKwz/DcA4pYxJQ/uG62UhU3?= =?us-ascii?Q?O6NBcvUjPzHNM7TM9Vgv7D5M2bNUv3R4BKsU4xxy2lmzE/xFfg5eEJNR3lu6?= =?us-ascii?Q?tEy8o1pQdd/vJljr9/jMqbeEpHhDY+X0PoT0bE15j95jHsdI7Pe9r8G00Ol5?= =?us-ascii?Q?s/SDzvlSXhG8ErhypkLWCA69NBhrzzY74xF08ZNGWxk0d2n9Gp2tGm15A1C+?= =?us-ascii?Q?I2739cpsggDCcCq5eqKM9tO1+3ORHYSZGZRoytOpGFnLLPBCAAi6iE5Es2EM?= =?us-ascii?Q?pjQbSjZ8/6kWhCxq/wukjHypnwiqIJIL5XTN/FrSlMFLCoJaS8kV3yMfeyKp?= =?us-ascii?Q?PVxYDDUBfi41q5LH7SEDhJa6nr0DgDOtnOIiyV4m3TwVxOKnSdjDZUYDZxYr?= =?us-ascii?Q?rGYR9tBC4iYYSoitEfyib1WR/H886LUxINwRRNmbjXdeZxlqA6tn3NYJ8bVr?= =?us-ascii?Q?OLxIdh/msiZ0NUJaVw2b3mvhdPbNNunT7ebxjBONQmwvnLz3AtQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0751;5:CCSex1U6EvD80bKlf/sMZeo4EahMQ6j9tLl7j9Vb4obRzNJxOFdG8n+rZpvAyDDR/rpc91dOlfC8e/EYS59NhBHQHFsGCsRQx/vNBvSWPwoaO66afdatnbW5vrOnVcfqSlW5tFXgVbI5I5HpEm/JsQ==;24:xJu9kE1iqtZOuNC0kD9ijsmN5Jj4yTUcpOaqtmLD+f3+/hGBkWrsbpoVTnegYxngAegBAt0LMJ6BD/c6+/o8PQHbftNUaNPoq4HePFQxEhI=;20:A8msro68glM7P2DV86dZqDhCkTUMk0gg++Hh4gUqwtj9E9+FmzzggmWs0IaiO95N20h2DwZkZ393z1VXVFN9iA== X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2015 10:18:09.5490 (UTC) X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=72f988bf-86f1-41af-91ab-2d7cd011db47;Ip=[206.191.229.116];Helo=[064-smtp-out.microsoft.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0751 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2133 Lines: 52 > From: David Miller > Sent: Thursday, July 30, 2015 6:28 > > From: Dexuan Cui > > Date: Tue, 28 Jul 2015 05:35:30 -0700 > > > > In the SMP guest case, when the per-channel callback hvsock_events() is > > running on virtual CPU A, if the guest tries to close the connection on > > virtual CPU B: we invoke vmbus_close() -> vmbus_close_internal(), > > then we can have trouble: on B, vmbus_close_internal() will send IPI > > reset_channel_cb() to A, trying to set channel->onchannel_callbackto NULL; > > on A, if the IPI handler happens between > > "if (channel->onchannel_callback != NULL)" and invoking > > channel->onchannel_callback, we'll invoke a function pointer of NULL. > > > > This is why the patch is necessary. > > > Sorry, I do not accept that you must use conditional locking and/or > IRQ disabling. > > Boil it down to what is necessary for the least common denominator, > and use that unconditionally. Hi David, Thanks for the comment! I agree with you it's not clean to use conditional IRQ disabling. Here I didn't use unconditionally IRQ disabling because the Hyper-V netvsc and storvsc driver's vmbus event callbacks (i.e. netvsc_channel_cb() and storvsc_on_channel_callback()) may take relatively long time (e.g., netvsc can operate at a speed of 10Gb) and I think it's bad to disable IRQ for long time when the callbacks are running in a tasklet context, e.g., the Hyper-V timer can be affected: see vmbus_isr() -> hv_process_timer_expiration(). To resolve the race condition between vmbus_close_internal() and process_chn_event() in SMP case, now I propose a new method: we can serialize the 2 paths by adding tasklet_disable(hv_context.event_dpc[channel->target_cpu]) and tasklet_enable(...) in vmbus_close_internal(). In this way, we need the least change and we can drop this patch. Please let me know your opinion. Thanks, -- Dexuan -- 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/