Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752597AbcDZHgc (ORCPT ); Tue, 26 Apr 2016 03:36:32 -0400 Received: from mail-db5eur01on0081.outbound.protection.outlook.com ([104.47.2.81]:2601 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752517AbcDZHgQ (ORCPT ); Tue, 26 Apr 2016 03:36:16 -0400 Authentication-Results: spf=pass (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; synopsys.com; dkim=none (message not signed) header.d=none;synopsys.com; dmarc=pass action=none header.from=mellanox.com; From: Noam Camus To: CC: , , , , Subject: [PATCH 2/3] net: nps_enet: Sync access to packet sent flag Date: Tue, 26 Apr 2016 10:35:25 +0300 Message-ID: <1461656126-22226-3-git-send-email-noamca@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1461656126-22226-1-git-send-email-noamca@mellanox.com> References: <1461656126-22226-1-git-send-email-noamca@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.000.1202-22284.005 X-TM-AS-Result: No--5.069800-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:193.47.165.134;IPV:NLI;CTRY:IL;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(189002)(199003)(2906002)(36756003)(6806005)(5008740100001)(48376002)(106466001)(50466002)(33646002)(586003)(1220700001)(11100500001)(107886002)(189998001)(1096002)(81166005)(110136002)(4326007)(551934003)(76176999)(50986999)(87936001)(101416001)(5003940100001)(2950100001)(92566002)(77096005)(49486002)(229853001)(2351001)(4001430100002)(47776003)(19580395003)(19580405001)(50226001)(86362001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB1854;H:mtlcas13.mtl.com;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD047;1:p+xOJdAiapGmxGv9x5Ol8HHHDJHh6SDRRQEGhCtgQB2ZMps/drfPEQbzMhUrwL4GbPQo8B3q/VweMLRsRcgsD0rxfJIwJ8nsnshfd9zcRx1U1BBKY7WaLEUj/w3j4Qs6ikV1Zak9X5u3X8DhNeUeah6VY9Iek0BFZx9xXNz+l9YYrK+9gFd/ntDU7nvvPgtVM2i05ZF2rf1A2kVks4ClSCH3Te18p1IXWP/OMe9+XbZtw9/YQimUDSSsnhOoWshA/n3EAlFFs0lbF7fBpgG7Z2uhd1s2XfO21JxaIsNYSIsTXlbnkPfJVyr3F0aOnC6Hg17RspnGYbcvLSebfDj5HHa8yWgexJ1nQJs/BHFZ3IC+NgpYcMmC8azOS3n5Ar+CWerR8Vbzm2x+yYTedcwate1ibqMmtuyqNTfsDP1eM8nL8PkSxml4GbEI4E+7PwvekFcKjMcZ07XqKlX6ZVNOKIYg2WWyqP1AfWgC6KSvA4PLeNwppgsTnYT8J7HSDnoBZMP3SIcZCxC+JgWGARsCW4pUgZ/Qyhf/m6RIxvUg7wE= X-MS-Office365-Filtering-Correlation-Id: 1f71a9f9-7e81-46a9-fb4a-08d36da570b4 X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1854;2:bS7UemW2LcnGS8SCbRC3sXfKBQsopXwxC6MaoVSJ5gwsx2kUJM+Y6fMyFjDbibl1oAJwSEHpXpgEDtnj+lRvYTnfqCOTXD3VNRcA9qWe0jcHsil3AQDaYhs9QuBLLjyIiotyflklS8gtrMObNygKOzKeHNzDtvpLMZz7IIoBNsH7YE/aUuDwxZcsX8dxaFxl;3:nZG9ldsOIabWnXJtxKGa/vOCv4Zv3VuTJz+D8jHwaGmD2hWIdonQRefpy49Jt6htQtaQhyeeVfBe3dd49V62jGGeY7z4yXVCwCYpbJ2ZVOz2jEESys57jVFHLQUagDSilqPCsJljkbdYcqjbd7hlB2HogP1YY12fmY+Ixf8BNVxQT0nqh1pSF1ByXO4jcUbL9I90sVXfJSZG30yt9vrwGj8Z5vN7rxGdB9UNTpkvn+FFTIT1pZORZGULNBm6Bf0ROiDKQHRT63x8si4+dZe2zg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:VI1PR05MB1854; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1854;25:NRZYkHyNOY7DlFm0CWf3hkxRGi/ImAZwTSBN+HQY+PuQdnKNZ+E0sIPkXX9D/R+Hvz7aEBxUvjtmSDzIGSI0DjQfeRqOeZazW4BdhR93rmMEsGqloLbm7Fpa6l6dvc3qCtOCXvocRmNvZ7BlwROXUhdP4JmxGofDCSTKJNaT4SnPPSq5wFuJyVWUkBXAcFJM8kdRumfXppi6v6iAerHhx28AWtCntDtwCdKhVlsEobGuhcmy9uaf94c8e5NPi5/3+yBUlmwCH/BK6BCp6642uS5p8DV+huU3eGWlBXm7oHZEG1X7yogHOquYQr11XCnbusq/jzfSMaj/p8ZEYncMaLwwtZSMB6K8gXldE1+b5HBH3b3f0NmDas0aVzF7q3KvUCNQc3sa3jhOsW+ojETh1AjHO4zMTnCh+L2sv2AJYKN+iYVjEJvo6D7LShw60gIPmANZEupQKNF/cChkRylMt3U8lVSMR9QKbmIJMkqn3d4R/XS0z1RFisllwmGlj0m8SpeCuYsTdG+23t/lYYR9gd2pPeT2JgSlMuDJnd0vVjalxU2870FELZ/E/prNJCZm2rUW9i6aNDbVlQ4id6OkgFLpHgOq8ZA+7M1K5Bl27RBKotppSmYfVwuGlX/srlrW+9aL3Ds+XHNiaYGpGVvRZPBZHFNW55lsOMw1ludB+Q7xZ/eDTyDQ+TrdVcx9Hei4 X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1854;20:j8tSjp6a7ccLFDcQqXGK0l27TZXK+0Yxu8caT6s4FAgbVLU9TylP0cwr9QTX/TT3cpVqRzOj7fPUCmKzGwDcXNhwUne0gDXVNfB3KQtIhvYtz1N0IU7PLX4Io0M2WGTw9nyR/fmJtA0GBqxoUWiAfvOMq8jnbvfBpLWl72SBC07WHV7HWvHoCRJiy9kMk5SD6xXKHCBFKAOkb48KAeFozE75TjqIVCFRwFg+pN0Bg70tAu59TjipkeHcrJuJuIr94GWa5R9WYlSLY1vCPHroxWX+r5ShlyVpBROglEOfmCKChgNqyYuU6mwbnjhVUqPyyR7Z0434od97tVzH1cHrkB/3jPXaGusf4wdJ9HyMcCEc/fu08fjOg/jwpqOEIyR0QYhGc7AoarEeJzL53Ci7EYGzjjJaVcLGkUcGU1EWoY8vjIKa30t/0qnqkxSC4OtFXWB3p0kYvS5drF2QGQhrHAinF7bfrMkwNSBbUKH/dSyudfxyLSbLUFIU7+OZgGp9 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521072)(601004)(2401047)(5005006)(13018025)(13023025)(13015025)(8121501046)(13024025)(13017025)(3002001)(10201501046)(6055026);SRVR:VI1PR05MB1854;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1854; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1854;4:si6WHwODVXtdtKEg1aKH5Z7QMuyqGO6f8EYUU6QelnpZAlXOFDlxxBH9lIrdDOz2FLLWBYxZd6Z7YOvrgFamm6WRtKZWGplSETmxLUhWxe4AJw195b5l2g9EOoYRKNHyvgBC0G6c8y6cXh5U33IQMwR6Wt2syWBZt2C2ruPXF+YUhKXJdK8Qq6qtTZrFba1XnpPmW2L1KMSfC5rc0/ERCyiKB2rYipDlkxAn3hNoDISYnw59ztwvzMNGNYM8hBoxXWhzxhuOXvc2VsKW9bZbplAzGUZHTNGlS5cv9pObEo23ERhmjuLkEuKH4UKX5oUwSR0f9eLekJRte5ow/CRUq5oZXtNAYdJARTAWJ9TdkvHPGvrotfauyE+UnUT/yf257zbfifpN3cenf7ZVtNLQTpiBKCUYHBCn9Z9Or5oMQNgxKj0ztfLjrYLpuMrMkxll93c8lLntJgzvQzil0JBOAgs30RnrxMdRmRtJSnRL9ZBF2I4tofXSvTmq97CTcCxh X-Forefront-PRVS: 0924C6A0D5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR05MB1854;23:LLkVCTWSneqR8VdWuCozG3FqRT8sAjsbdx3QobSkc?= =?us-ascii?Q?truGSR4hTPBJOABQBo6/gNUru3T15UCR8aYNRMGp3Wtl+8mBYPfkYreA0qoY?= =?us-ascii?Q?T0yIQ70mMdzZSoLLSIqddTESYYnbN5P4vowBbfomIp2CpnwEjGtAYpJWHlsu?= =?us-ascii?Q?US4UCnkEwzTlATMbWp//R1gX17jSRjG0TN/gOPK99/6LHtaBbKgTNqVZWl2/?= =?us-ascii?Q?3NAiRdqpYRIxTpfVKpu5XGRUih/TzjuwyHOHrhmoWHs7X6t1XZ3Go2CedFcG?= =?us-ascii?Q?cbUbrjCC1NjZZFE1NsGxr3B8F1EFuawmzBrpSddcKAMcKUQDtHEm2pLA4KNU?= =?us-ascii?Q?8iwHZeG2ehRIwGhenYCfcSbCZZVqy6qulUts9/c1xKVyTTXsvvnn4bDXZIc3?= =?us-ascii?Q?jrlwlY7Rd8ebyjj1QYh/fFG1By4c57GAH7mnDxD0lR30KwexjLS7uQHqRFiT?= =?us-ascii?Q?5KSHnm3qhTLpxleoXo0+1efnZmdPnRnjv65tbSiG4/v+wRqCuruvvMWFNbYK?= =?us-ascii?Q?wxllvtS8VgsVQ/cFzwIDcaL5MRKQhriXoondsLVd2NMXe+3bHHroW+YbHBug?= =?us-ascii?Q?rsrlygykUvLK38YoCEcLbvYVODwSv7V0OUgz0DCa/U758Fer1+7xOcJ3XAXM?= =?us-ascii?Q?ilw1Gj588TcOCkPEDtQZpnpoVDLMzlTYNFzTITXo6JWcuRSsFxigjAH8rmTu?= =?us-ascii?Q?UP2PORt5OqPd7tdHWKxQThIdh1df3mCYHT7Hs3RH3T1Q/WW4TwNUi89mO3U7?= =?us-ascii?Q?9AHsfHKx66g9VrdYSbahLoPRTeDgCXdrANgraIeLSwhFUsx1hjVYiGdxKcGn?= =?us-ascii?Q?YNQpWv84mBOUq/PIKoB/cMdJt5SphSBaqUob1RSxUNnyzkMidodyWdAdDLRI?= =?us-ascii?Q?Vl7YBBiLTqV6mfdi8EqJFGVw6GhyH2fZF06MXllT9FFa7xw17O8m9yl+tRNW?= =?us-ascii?Q?zw+rIn5+6xZ5BkqoBV4IdqN33DSdFrGzd3Ke3q8YP/nMD7q4mNb2beEeazXU?= =?us-ascii?Q?Wmg8tGZ19KMAkBAFLaMbTORoCuTTbLre/wrUZFxwjlztjuO2OtVDwhGFvWPV?= =?us-ascii?Q?f4Q7Bk=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1854;5:Wy/eyigsOM8FZ6ZOxrMB40ptn6lJSJugBRgBY8Mctea5ZRJ1vXF4XhjpKHMzIVmafsEk5zNu//ofE5X/Mk3OT+p+dfrImc1j6PXIlYNdJZHb/VgK7jL19qFKs4xmnMe+ajWAcqylRltcKZ8m/cLQWQ==;24:48oUHXDo2Oy+dMes064GYcXAXBzRCvvmjWW5of6GfMV//ieha3Z8fgidvBn2ovMKQtvegzm3iDaY5DtJY8umiaI+dWrFktmNC737aQr5ibg=;7:oApMMeawP7rO/zr7p1SosgUf0sM8TLSSHhdRAiv7gzAQRhQWsyGrRyJXS2oGpWWBb7ZB6+/eghTGRJXnCDjN9SyM1xHye3mjfMcS6Jc1QhMB3uBExEXW4jV9i9Nr22RxTXNlQ7QYcfOhyRold9kdLiQlAoZlSiCjEipT5rHL6igpU28qZiDUTWKQXyDBd2HG SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2016 07:36:11.5596 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1854 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1531 Lines: 59 From: Elad Kanfi Below is a description of a possible problematic sequence. CPU-A is sending a frame and CPU-B handles the interrupt that indicates the frame was sent. CPU-B reads an invalid value of tx_packet_sent. CPU-A CPU-B ----- ----- nps_enet_send_frame . . tx_packet_sent = true order HW to start tx . . HW complete tx ------> get tx complete interrupt . . if(tx_packet_sent == true) end memory transaction (tx_packet_sent actually written) Problem solution: Add a memory barrier after setting tx_packet_sent, in order to make sure that it is written before the packet is sent. Signed-off-by: Elad Kanfi Acked-by: Noam Camus --- drivers/net/ethernet/ezchip/nps_enet.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/drivers/net/ethernet/ezchip/nps_enet.c b/drivers/net/ethernet/ezchip/nps_enet.c index 5ed06a6..8cf3cde 100644 --- a/drivers/net/ethernet/ezchip/nps_enet.c +++ b/drivers/net/ethernet/ezchip/nps_enet.c @@ -394,6 +394,13 @@ static void nps_enet_send_frame(struct net_device *ndev, /* Indicate SW is done */ priv->tx_packet_sent = true; + + /* before the frame is sent we have to make + * sure that priv->tx_packet_sent will be valid + * for the CPU'S that handles the ISR and NAPI poll + */ + smp_wmb(); + tx_ctrl_value |= NPS_ENET_ENABLE << TX_CTL_CT_SHIFT; /* Send Frame */ nps_enet_reg_set(priv, NPS_ENET_REG_TX_CTL, tx_ctrl_value); -- 1.7.1