All of lore.kernel.org
 help / color / mirror / Atom feed
From: Viresh Kumar <viresh.kumar@linaro.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Linaro Kernel Mailman List <linaro-kernel@lists.linaro.org>,
	Kevin Hilman <khilman@linaro.org>,
	Preeti U Murthy <preeti@linux.vnet.ibm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Linaro Networking <linaro-networking@linaro.org>,
	Steven Miao <realmz6@gmail.com>, Mark Salter <msalter@redhat.com>,
	Michal Simek <monstr@monstr.eu>,
	Ralf Baechle <ralf@linux-mips.org>,
	Ley Foon Tan <lftan@altera.com>, Jonas Bonn <jonas@southpole.se>,
	"David S. Miller" <davem@davemloft.net>,
	Jeff Dike <jdike@addtoit.com>, Guan Xuetao <gxt@mprc.pku.edu.cn>
Subject: Re: [PATCH] clockevents: Add (missing) default case for switch blocks
Date: Fri, 20 Feb 2015 17:26:49 +0530	[thread overview]
Message-ID: <CAKohpokmCof2P8Un+i5eOS3BQhH_pMNATH4xkbbhw5TqJFEy9Q@mail.gmail.com> (raw)
In-Reply-To: <20150220114136.GA27483@gmail.com>

On 20 February 2015 at 17:11, Ingo Molnar <mingo@kernel.org> wrote:
>
> * Peter Zijlstra <peterz@infradead.org> wrote:

>> Maybe we should break that enum into two; one for devices
>> and one for the core interface and avoid the problem that
>> way.
>
> Yeah, that would do the trick.

Thanks for your suggestions. Just to confirm (before I spam lists with
patches), is
this somewhat similar to what you are looking for ?

diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h
index 59af26b54d15..80b669cb836d 100644
--- a/include/linux/clockchips.h
+++ b/include/linux/clockchips.h
@@ -32,17 +32,24 @@ enum clock_event_nofitiers {
 struct clock_event_device;
 struct module;

-/* Clock event mode commands */
+/* Clock event mode commands for legacy ->set_mode(): OBSOLETE */
 enum clock_event_mode {
        CLOCK_EVT_MODE_UNUSED = 0,
        CLOCK_EVT_MODE_SHUTDOWN,
        CLOCK_EVT_MODE_PERIODIC,
        CLOCK_EVT_MODE_ONESHOT,
        CLOCK_EVT_MODE_RESUME,
-
-       /* Legacy ->set_mode() callback doesn't support below modes */
 };

+/* Clock event modes, only for core's internal use */
+enum clock_event_dev_mode {
+       CLOCK_EVT_DEV_MODE_UNUSED = 0,
+       CLOCK_EVT_DEV_MODE_SHUTDOWN,
+       CLOCK_EVT_DEV_MODE_PERIODIC,
+       CLOCK_EVT_DEV_MODE_ONESHOT,
+       CLOCK_EVT_DEV_MODE_RESUME,
+       CLOCK_EVT_DEV_MODE_ONESHOT_STOPPED,  /* This would be the new
mode which I will add later */
+};
+
 /*
  * Clock event features
  */
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index 489642b08d64..16555d3db94d 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -95,14 +95,18 @@ u64 clockevent_delta2ns(unsigned long latch,
struct clock_event_device *evt)
 EXPORT_SYMBOL_GPL(clockevent_delta2ns);

 static int __clockevents_set_mode(struct clock_event_device *dev,
-                                 enum clock_event_mode mode)
+                                 enum clock_event_dev_mode mode)
 {
        /* Transition with legacy set_mode() callback */
        if (dev->set_mode) {
                /* Legacy callback doesn't support new modes */
-               if (mode > CLOCK_EVT_MODE_RESUME)
+               if (mode > CLOCK_EVT_DEV_MODE_RESUME)
                        return -ENOSYS;
-               dev->set_mode(mode, dev);
+               /*
+                * 'clock_event_dev_mode' and 'clock_event_mode' have 1-to-1
+                * mapping until *_RESUME, and so a simple cast will work.
+                */
+               dev->set_mode((enum clock_event_mode)mode, dev);
                return 0;
        }

@@ -111,29 +115,29 @@ static int __clockevents_set_mode(struct
clock_event_device *dev,

        /* Transition with new mode-specific callbacks */
        switch (mode) {
-       case CLOCK_EVT_MODE_UNUSED:
+       case CLOCK_EVT_DEV_MODE_UNUSED:
                /*
                 * This is an internal state, which is guaranteed to go from
                 * SHUTDOWN to UNUSED. No driver interaction required.
                 */
                return 0;

-       case CLOCK_EVT_MODE_SHUTDOWN:
+       case CLOCK_EVT_DEV_MODE_SHUTDOWN:
                return dev->set_mode_shutdown(dev);

-       case CLOCK_EVT_MODE_PERIODIC:
+       case CLOCK_EVT_DEV_MODE_PERIODIC:
                /* Core internal bug */
                if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC))
                        return -ENOSYS;
                return dev->set_mode_periodic(dev);

-       case CLOCK_EVT_MODE_ONESHOT:
+       case CLOCK_EVT_DEV_MODE_ONESHOT:
                /* Core internal bug */
                if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT))
                        return -ENOSYS;
                return dev->set_mode_oneshot(dev);

-       case CLOCK_EVT_MODE_RESUME:
+       case CLOCK_EVT_DEV_MODE_RESUME:
                /* Optional callback */
                if (dev->set_mode_resume)
                        return dev->set_mode_resume(dev);



Ofcourse, we also need to replace 'clock_event_mode' with 'clock_event_dev_mode'
and 'CLOCK_EVT_MODE_*' with 'CLOCK_EVT_DEV_MODE_*' in all core code..

--
viresh

WARNING: multiple messages have this Message-ID (diff)
From: viresh.kumar@linaro.org (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] clockevents: Add (missing) default case for switch blocks
Date: Fri, 20 Feb 2015 17:26:49 +0530	[thread overview]
Message-ID: <CAKohpokmCof2P8Un+i5eOS3BQhH_pMNATH4xkbbhw5TqJFEy9Q@mail.gmail.com> (raw)
In-Reply-To: <20150220114136.GA27483@gmail.com>

On 20 February 2015 at 17:11, Ingo Molnar <mingo@kernel.org> wrote:
>
> * Peter Zijlstra <peterz@infradead.org> wrote:

>> Maybe we should break that enum into two; one for devices
>> and one for the core interface and avoid the problem that
>> way.
>
> Yeah, that would do the trick.

Thanks for your suggestions. Just to confirm (before I spam lists with
patches), is
this somewhat similar to what you are looking for ?

diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h
index 59af26b54d15..80b669cb836d 100644
--- a/include/linux/clockchips.h
+++ b/include/linux/clockchips.h
@@ -32,17 +32,24 @@ enum clock_event_nofitiers {
 struct clock_event_device;
 struct module;

-/* Clock event mode commands */
+/* Clock event mode commands for legacy ->set_mode(): OBSOLETE */
 enum clock_event_mode {
        CLOCK_EVT_MODE_UNUSED = 0,
        CLOCK_EVT_MODE_SHUTDOWN,
        CLOCK_EVT_MODE_PERIODIC,
        CLOCK_EVT_MODE_ONESHOT,
        CLOCK_EVT_MODE_RESUME,
-
-       /* Legacy ->set_mode() callback doesn't support below modes */
 };

+/* Clock event modes, only for core's internal use */
+enum clock_event_dev_mode {
+       CLOCK_EVT_DEV_MODE_UNUSED = 0,
+       CLOCK_EVT_DEV_MODE_SHUTDOWN,
+       CLOCK_EVT_DEV_MODE_PERIODIC,
+       CLOCK_EVT_DEV_MODE_ONESHOT,
+       CLOCK_EVT_DEV_MODE_RESUME,
+       CLOCK_EVT_DEV_MODE_ONESHOT_STOPPED,  /* This would be the new
mode which I will add later */
+};
+
 /*
  * Clock event features
  */
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index 489642b08d64..16555d3db94d 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -95,14 +95,18 @@ u64 clockevent_delta2ns(unsigned long latch,
struct clock_event_device *evt)
 EXPORT_SYMBOL_GPL(clockevent_delta2ns);

 static int __clockevents_set_mode(struct clock_event_device *dev,
-                                 enum clock_event_mode mode)
+                                 enum clock_event_dev_mode mode)
 {
        /* Transition with legacy set_mode() callback */
        if (dev->set_mode) {
                /* Legacy callback doesn't support new modes */
-               if (mode > CLOCK_EVT_MODE_RESUME)
+               if (mode > CLOCK_EVT_DEV_MODE_RESUME)
                        return -ENOSYS;
-               dev->set_mode(mode, dev);
+               /*
+                * 'clock_event_dev_mode' and 'clock_event_mode' have 1-to-1
+                * mapping until *_RESUME, and so a simple cast will work.
+                */
+               dev->set_mode((enum clock_event_mode)mode, dev);
                return 0;
        }

@@ -111,29 +115,29 @@ static int __clockevents_set_mode(struct
clock_event_device *dev,

        /* Transition with new mode-specific callbacks */
        switch (mode) {
-       case CLOCK_EVT_MODE_UNUSED:
+       case CLOCK_EVT_DEV_MODE_UNUSED:
                /*
                 * This is an internal state, which is guaranteed to go from
                 * SHUTDOWN to UNUSED. No driver interaction required.
                 */
                return 0;

-       case CLOCK_EVT_MODE_SHUTDOWN:
+       case CLOCK_EVT_DEV_MODE_SHUTDOWN:
                return dev->set_mode_shutdown(dev);

-       case CLOCK_EVT_MODE_PERIODIC:
+       case CLOCK_EVT_DEV_MODE_PERIODIC:
                /* Core internal bug */
                if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC))
                        return -ENOSYS;
                return dev->set_mode_periodic(dev);

-       case CLOCK_EVT_MODE_ONESHOT:
+       case CLOCK_EVT_DEV_MODE_ONESHOT:
                /* Core internal bug */
                if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT))
                        return -ENOSYS;
                return dev->set_mode_oneshot(dev);

-       case CLOCK_EVT_MODE_RESUME:
+       case CLOCK_EVT_DEV_MODE_RESUME:
                /* Optional callback */
                if (dev->set_mode_resume)
                        return dev->set_mode_resume(dev);



Ofcourse, we also need to replace 'clock_event_mode' with 'clock_event_dev_mode'
and 'CLOCK_EVT_MODE_*' with 'CLOCK_EVT_DEV_MODE_*' in all core code..

--
viresh

  reply	other threads:[~2015-02-20 11:56 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-20  6:32 [PATCH] clockevents: Add (missing) default case for switch blocks Viresh Kumar
2015-02-20  6:32 ` Viresh Kumar
2015-02-20  8:38 ` Ingo Molnar
2015-02-20  8:38   ` Ingo Molnar
2015-02-20  8:48   ` Peter Zijlstra
2015-02-20  8:48     ` Peter Zijlstra
2015-02-20  9:36     ` Ingo Molnar
2015-02-20  9:36       ` Ingo Molnar
2015-02-20 10:12       ` Viresh Kumar
2015-02-20 10:12         ` Viresh Kumar
2015-02-20 10:52         ` Ingo Molnar
2015-02-20 10:52           ` Ingo Molnar
2015-02-20 11:37       ` Peter Zijlstra
2015-02-20 11:37         ` Peter Zijlstra
2015-02-20 11:41         ` Ingo Molnar
2015-02-20 11:41           ` Ingo Molnar
2015-02-20 11:56           ` Viresh Kumar [this message]
2015-02-20 11:56             ` Viresh Kumar
2015-02-20 13:22             ` Ingo Molnar
2015-02-20 13:22               ` Ingo Molnar
2015-02-20 13:58               ` Viresh Kumar
2015-02-20 13:58                 ` Viresh Kumar
2015-02-20 14:04                 ` Ingo Molnar
2015-02-20 14:04                   ` Ingo Molnar
2015-02-23  5:33                   ` Viresh Kumar
2015-02-23  5:33                     ` Viresh Kumar
2015-02-23 16:37                     ` Ingo Molnar
2015-02-23 16:37                       ` Ingo Molnar
2015-02-24 11:11                       ` viresh kumar
2015-02-24 11:11                         ` viresh kumar
2015-02-24 14:54                         ` Ingo Molnar
2015-02-24 14:54                           ` Ingo Molnar
2015-02-24 15:12                           ` Viresh Kumar
2015-02-24 15:12                             ` Viresh Kumar

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=CAKohpokmCof2P8Un+i5eOS3BQhH_pMNATH4xkbbhw5TqJFEy9Q@mail.gmail.com \
    --to=viresh.kumar@linaro.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=davem@davemloft.net \
    --cc=fweisbec@gmail.com \
    --cc=gxt@mprc.pku.edu.cn \
    --cc=jdike@addtoit.com \
    --cc=jonas@southpole.se \
    --cc=khilman@linaro.org \
    --cc=lftan@altera.com \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linaro-networking@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=monstr@monstr.eu \
    --cc=msalter@redhat.com \
    --cc=peterz@infradead.org \
    --cc=preeti@linux.vnet.ibm.com \
    --cc=ralf@linux-mips.org \
    --cc=realmz6@gmail.com \
    --cc=tglx@linutronix.de \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.