Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752059AbcL0EzL (ORCPT ); Mon, 26 Dec 2016 23:55:11 -0500 Received: from shards.monkeyblade.net ([184.105.139.130]:44904 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750841AbcL0EzB (ORCPT ); Mon, 26 Dec 2016 23:55:01 -0500 Date: Mon, 26 Dec 2016 23:54:36 -0500 (EST) Message-Id: <20161226.235436.131087168899382517.davem@davemloft.net> To: hock.leong.kweh@intel.com Cc: Joao.Pinto@synopsys.com, peppe.cavallaro@st.com, seraphin.bonnaffe@st.com, alexandre.torgue@gmail.com, manabian@gmail.com, niklas.cassel@axis.com, johan@kernel.org, pavel@ucw.cz, boon.leong.ong@intel.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, weifeng.voon@intel.com, lars.persson@axis.com Subject: Re: [PATCH] net: stmmac: synchronize stmmac_open and stmmac_dvr_probe From: David Miller In-Reply-To: <1482839100-20612-1-git-send-email-hock.leong.kweh@intel.com> References: <1482839100-20612-1-git-send-email-hock.leong.kweh@intel.com> X-Mailer: Mew version 6.7 on Emacs 25.1 / Mule 6.0 (HANACHIRUSATO) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Mon, 26 Dec 2016 19:55:25 -0800 (PST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 765 Lines: 18 From: "Kweh, Hock Leong" Date: Tue, 27 Dec 2016 19:44:59 +0800 > From: "Kweh, Hock Leong" > > If kernel module stmmac driver being loaded after OS booted, there is a > race condition between stmmac_open() and stmmac_mdio_register(), which is > invoked inside stmmac_dvr_probe(), and the error is showed in dmesg log as > PHY not found and stmmac_open() failed: ... > The resolution used wait_for_completion_interruptible() to synchronize > stmmac_open() and stmmac_dvr_probe() to prevent the race condition > happening. > > Signed-off-by: Kweh, Hock Leong The proper thing to do is to make sure register_netdevice() is not invoked until it is %100 safe to call stmmac_open().