LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: John Stultz <john.stultz@linaro.org>
To: linux-kernel@vger.kernel.org
Cc: John Stultz <john.stultz@linaro.org>,
	Alessandro Zummo <a.zummo@towertech.it>,
	Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 2/4] RTC: Fix rtc driver ioctl specific shortcutting
Date: Wed,  2 Feb 2011 18:14:41 -0800	[thread overview]
Message-ID: <1296699283-6784-3-git-send-email-john.stultz@linaro.org> (raw)
In-Reply-To: <1296699283-6784-1-git-send-email-john.stultz@linaro.org>

Some RTC drivers enable functionality directly via their ioctl method
instead of using the generic ioctl handling code. With the recent
virtualization of the RTC layer, its now important that the generic
layer always be used.

This patch moved the rtc driver ioctl method call to after the generic
ioctl processing is done. This allows hardware specific features or
ioctls to still function, while relying on the generic code for handling
everything else.

This patch on its own may more obviously break rtc drivers that
implement the alarm irq enablement via their ioctl method instead of
implementing the alarm_irq_enable method. Those drivers will be fixed
in a following patch. Additionaly, those drivers are already likely to
not be functioning reliably even without this patch.

CC: Alessandro Zummo <a.zummo@towertech.it>
CC: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br>
CC: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 drivers/rtc/rtc-dev.c |   21 +++++++--------------
 1 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c
index 212b16e..37c3cc1 100644
--- a/drivers/rtc/rtc-dev.c
+++ b/drivers/rtc/rtc-dev.c
@@ -154,19 +154,7 @@ static long rtc_dev_ioctl(struct file *file,
 	if (err)
 		goto done;
 
-	/* try the driver's ioctl interface */
-	if (ops->ioctl) {
-		err = ops->ioctl(rtc->dev.parent, cmd, arg);
-		if (err != -ENOIOCTLCMD) {
-			mutex_unlock(&rtc->ops_lock);
-			return err;
-		}
-	}
-
-	/* if the driver does not provide the ioctl interface
-	 * or if that particular ioctl was not implemented
-	 * (-ENOIOCTLCMD), we will try to emulate here.
-	 *
+	/*
 	 * Drivers *SHOULD NOT* provide ioctl implementations
 	 * for these requests.  Instead, provide methods to
 	 * support the following code, so that the RTC's main
@@ -329,7 +317,12 @@ static long rtc_dev_ioctl(struct file *file,
 		return err;
 
 	default:
-		err = -ENOTTY;
+		/* Finally try the driver's ioctl interface */
+		if (ops->ioctl) {
+			err = ops->ioctl(rtc->dev.parent, cmd, arg);
+			if (err == -ENOIOCTLCMD)
+				err = -ENOTTY;
+		}
 		break;
 	}
 
-- 
1.7.3.2.146.gca209


  parent reply	other threads:[~2011-02-03  2:14 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-03  2:14 [PATCH 0/4] RTC regression fixups John Stultz
2011-02-03  2:14 ` [PATCH 1/4] RTC: Prevents a division by zero in kernel code John Stultz
2011-02-03  2:14 ` John Stultz [this message]
2011-02-03  8:43   ` [PATCH 2/4] RTC: Fix rtc driver ioctl specific shortcutting Wolfram Sang
2011-02-03 19:01     ` John Stultz
2011-02-03  2:14 ` [PATCH 3/4] RTC: Convert rtc drivers to use the alarm_irq_enable method John Stultz
2011-02-03  2:14 ` [PATCH 4/4] RTC: Fix minor compile warning John Stultz
2011-02-03 17:30 ` [PATCH 0/4] RTC regression fixups Marcelo Roberto Jimenez
2011-02-03 19:16   ` John Stultz
2011-02-03 20:31     ` Marcelo Roberto Jimenez
2011-02-03 21:37       ` John Stultz
2011-02-03 22:27         ` john stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1296699283-6784-3-git-send-email-john.stultz@linaro.org \
    --to=john.stultz@linaro.org \
    --cc=a.zummo@towertech.it \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mroberto@cpti.cetuc.puc-rio.br \
    --cc=tglx@linutronix.de \
    --subject='Re: [PATCH 2/4] RTC: Fix rtc driver ioctl specific shortcutting' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).