From patchwork Mon May 17 22:02:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Carpenter X-Patchwork-Id: 52818 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-wy0-f184.google.com (mail-wy0-f184.google.com [74.125.82.184]) by ozlabs.org (Postfix) with ESMTP id 8E030B7DB1 for ; Tue, 18 May 2010 08:02:59 +1000 (EST) Received: by wyi11 with SMTP id 11sf106122wyi.11 for ; Mon, 17 May 2010 15:02:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:x-beenthere:received:received:received :received:received-spf:received:received:received:date:from:to:cc :subject:message-id:mime-version:user-agent :x-original-authentication-results:x-original-sender:reply-to :precedence:mailing-list:list-id:list-post:list-help:list-archive :sender:list-subscribe:list-unsubscribe:content-type :content-disposition; bh=v6vNotaVcXMw/NWF27g9xdXjEUoekN8g5845Ocn7Mow=; b=Uao8vrBaaI61QHieC4pm3n625B1TVT/CA5rlMZpV9VO6M43bDBlXDb3I14cf80DpV4 VnK5mjQpvC9B+qFt/MdMR4NzTaDvOgLZIUAIQ3WfIG1Y67alQAdGtSEUG+00BipBfMRs XOoC/61ibQdnMca6EF85mTlVWZD+KrL0eX9q0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-beenthere:received-spf:date:from:to:cc:subject:message-id :mime-version:user-agent:x-original-authentication-results :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type:content-disposition; b=cb4ha2tvXty5koJnM2ATE0Fp3anl0bT7iE8iCNk4mfJB93P0TS9wd8x2z9ESJb5vad 1qO1/w2DY1BLjT1mbUF0ufwGJV+DxehQ6EOS3RGCHt8fSJnB2JPNoK/A6Ny9cdEVFV5U cXhqWLzujpC5TUtjYhZ1dnU55VCP6XokNHwhQ= Received: by 10.223.132.216 with SMTP id c24mr808417fat.27.1274133777395; Mon, 17 May 2010 15:02:57 -0700 (PDT) X-BeenThere: rtc-linux@googlegroups.com Received: by 10.87.8.39 with SMTP id l39ls1805452fgi.2.p; Mon, 17 May 2010 15:02:51 -0700 (PDT) Received: by 10.87.55.39 with SMTP id h39mr490353fgk.28.1274133771878; Mon, 17 May 2010 15:02:51 -0700 (PDT) Received: by 10.87.55.39 with SMTP id h39mr490352fgk.28.1274133771861; Mon, 17 May 2010 15:02:51 -0700 (PDT) Received: from mail-fx0-f50.google.com (mail-fx0-f50.google.com [209.85.161.50]) by gmr-mx.google.com with ESMTP id g17si4704726fai.6.2010.05.17.15.02.50; Mon, 17 May 2010 15:02:50 -0700 (PDT) Received-SPF: pass (google.com: domain of error27@gmail.com designates 209.85.161.50 as permitted sender) client-ip=209.85.161.50; Received: by mail-fx0-f50.google.com with SMTP id 1so1687286fxm.9 for ; Mon, 17 May 2010 15:02:50 -0700 (PDT) Received: by 10.223.40.136 with SMTP id k8mr342096fae.24.1274133770713; Mon, 17 May 2010 15:02:50 -0700 (PDT) Received: from bicker ([205.177.176.130]) by mx.google.com with ESMTPS id 2sm27748042fav.1.2010.05.17.15.02.43 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 17 May 2010 15:02:49 -0700 (PDT) Date: Tue, 18 May 2010 00:02:16 +0200 From: Dan Carpenter To: Alessandro Zummo Cc: Paul Gortmaker , Andrew Morton , Malte =?iso-8859-1?Q?Schr=F6der?= , Ralf Baechle , Herton Ronaldo Krzesinski , rtc-linux@googlegroups.com, randy.dunlap@oracle.com Subject: [rtc-linux] [patch] rtc-cmos: do dev_set_drvdata() earlier in the initialization Message-ID: <20100517220123.GA7691@bicker> MIME-Version: 1.0 User-Agent: Mutt/1.5.18 (2008-05-17) X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of error27@gmail.com designates 209.85.161.50 as permitted sender) smtp.mail=error27@gmail.com; dkim=pass (test mode) header.i=@gmail.com X-Original-Sender: error27@gmail.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Content-Disposition: inline This is in response to https://bugzilla.kernel.org/show_bug.cgi?id=15963 The bug is an oops when dev_get_drvdata() returned null in cmos_update_irq_enable(). The call tree looks like this: rtc_dev_ioctl() => rtc_update_irq_enable() => cmos_update_irq_enable() It's caused by a race condition in the module initialization. It is rtc_device_register() which makes the ioctl operations live so I moved the call to dev_set_drvdata() before the call to rtc_device_register(). Reported-by: Randy Dunlap Signed-off-by: Dan Carpenter Tested-by: Randy Dunlap diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index e9aa814..aa13875 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -719,6 +719,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) } } + cmos_rtc.dev = dev; + dev_set_drvdata(dev, &cmos_rtc); + cmos_rtc.rtc = rtc_device_register(driver_name, dev, &cmos_rtc_ops, THIS_MODULE); if (IS_ERR(cmos_rtc.rtc)) { @@ -726,8 +729,6 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) goto cleanup0; } - cmos_rtc.dev = dev; - dev_set_drvdata(dev, &cmos_rtc); rename_region(ports, dev_name(&cmos_rtc.rtc->dev)); spin_lock_irq(&rtc_lock);