From: Khadija Kamran <kamrankhadijadj@gmail.com>
To: Dan Carpenter <error27@gmail.com>
Cc: outreachy@lists.linux.dev, hvaibhav.linux@gmail.com,
johan@kernel.org, elder@kernel.org, gregkh@linuxfoundation.org,
greybus-dev@lists.linaro.org, linux-staging@lists.linux.dev,
linux-kernel@vger.kernel.org,
Alison Schofield <alison.schofield@intel.com>
Subject: Re: [PATCH 2/2] staging: greybus: refactor arche_platform_wd_irq()
Date: Sat, 1 Apr 2023 22:41:58 +0500 [thread overview]
Message-ID: <ZChs5jB7DMCUnVzr@khadija-virtual-machine> (raw)
In-Reply-To: <6ce8aa34-e600-4d6a-adad-ead8255342e5@kili.mountain>
On Thu, Mar 30, 2023 at 06:23:19PM +0300, Dan Carpenter wrote:
> On Thu, Mar 30, 2023 at 07:11:25PM +0500, Khadija Kamran wrote:
> > Linux kernel coding-style suggests to fix your program if it needs more
> > than 3 levels of indentation. Due to indentation, line length also
> > exceeds 100 columns, resulting in issues reported by checkpatch.
> >
> > Refactor the arche_platform_wd_irq() function and reduce the indentation
> > with the help of goto statement.
> >
> > Suggested-by: Alison Schofield <alison.schofield@intel.com>
> > Signed-off-by: Khadija Kamran <kamrankhadijadj@gmail.com>
> > ---
> > drivers/staging/greybus/arche-platform.c | 79 ++++++++++++------------
> > 1 file changed, 41 insertions(+), 38 deletions(-)
> >
> > diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c
> > index a64c1af091b0..dde30c8da1a1 100644
> > --- a/drivers/staging/greybus/arche-platform.c
> > +++ b/drivers/staging/greybus/arche-platform.c
> > @@ -158,49 +158,52 @@ static irqreturn_t arche_platform_wd_irq(int irq, void *devid)
> >
> > spin_lock_irqsave(&arche_pdata->wake_lock, flags);
> >
> > - if (gpiod_get_value(arche_pdata->wake_detect)) {
> > - /* wake/detect rising */
> > + if (!gpiod_get_value(arche_pdata->wake_detect))
> > + goto falling;
> >
> > + /* wake/detect rising */
> > +
> > + /*
> > + * If wake/detect line goes high after low, within less than
> > + * 30msec, then standby boot sequence is initiated, which is not
> > + * supported/implemented as of now. So ignore it.
> > + */
> > + if (arche_pdata->wake_detect_state != WD_STATE_BOOT_INIT)
> > + goto out;
>
> This checks that we are in WD_STATE_BOOT_INIT state.
>
> > +
> > + if (time_before(jiffies,
> > + arche_pdata->wake_detect_start +
> > + msecs_to_jiffies(WD_COLDBOOT_PULSE_WIDTH_MS))) {
> > + arche_platform_set_wake_detect_state(arche_pdata,
> > + WD_STATE_IDLE);
> > + got out;
> > + }
> > +
> > + /* Check we are not in middle of irq thread already */
> > + if (arche_pdata->wake_detect_state !=
> > + WD_STATE_COLDBOOT_START) {
>
> This checks that we are not in WD_STATE_COLDBOOT_START state. How are
> we going to be in COLDBOOT if we are in INIT? Is this changing in the
> background? Can this check be removed? This might be took tricky to
> answer but it's important that we understand this before we continue.
>
>
> > + arche_platform_set_wake_detect_state(arche_pdata,
> > + WD_STATE_COLDBOOT_TRIG);
> > + rc = IRQ_WAKE_THREAD;
> > + goto out;
> > + }
>
> Let's assume the above check cannot be removed.
>
> In the original code if gpiod_get_value(arche_pdata->wake_detect)
> returned true and arche_pdata->wake_detect_state == WD_STATE_IDLE then
> it just returned without doing anything, but now we fall through to the
> falling: label below.
Hey Dan,
Just to clear my undrstanding in the new code, if
gpiod_get_value(arche_pdata->wake_detect) returned true, we go to the
rising section. In the rising section if arche_pdata->wake_detect_state
== WD_STATE_IDLE then the condition,
if (arche_pdata->wake_detect_state != WD_STATE_BOOT_INIT) becomes true
so we goto out label. I do not understand how we go to falling label.
Regards,
Khadija
> So this patch seems like it introduces a bug, but actually it might just
> have a dead code problem.
>
> regards,
> dan carpenter
>
> > +
> > +falling:
> > + /* wake/detect falling */
> > + if (arche_pdata->wake_detect_state == WD_STATE_IDLE) {
> > + arche_pdata->wake_detect_start = jiffies;
> > /*
> > - * If wake/detect line goes high after low, within less than
> > - * 30msec, then standby boot sequence is initiated, which is not
> > - * supported/implemented as of now. So ignore it.
> > + * In the beginning, when wake/detect goes low
> > + * (first time), we assume it is meant for coldboot
> > + * and set the flag. If wake/detect line stays low
> > + * beyond 30msec, then it is coldboot else fallback
> > + * to standby boot.
> > */
> > - if (arche_pdata->wake_detect_state == WD_STATE_BOOT_INIT) {
> > - if (time_before(jiffies,
> > - arche_pdata->wake_detect_start +
> > - msecs_to_jiffies(WD_COLDBOOT_PULSE_WIDTH_MS))) {
> > - arche_platform_set_wake_detect_state(arche_pdata,
> > - WD_STATE_IDLE);
> > - } else {
> > - /*
> > - * Check we are not in middle of irq thread
> > - * already
> > - */
> > - if (arche_pdata->wake_detect_state !=
> > - WD_STATE_COLDBOOT_START) {
> > - arche_platform_set_wake_detect_state(arche_pdata,
> > - WD_STATE_COLDBOOT_TRIG);
> > - rc = IRQ_WAKE_THREAD;
> > - }
> > - }
> > - }
> > - } else {
> > - /* wake/detect falling */
> > - if (arche_pdata->wake_detect_state == WD_STATE_IDLE) {
> > - arche_pdata->wake_detect_start = jiffies;
> > - /*
> > - * In the beginning, when wake/detect goes low
> > - * (first time), we assume it is meant for coldboot
> > - * and set the flag. If wake/detect line stays low
> > - * beyond 30msec, then it is coldboot else fallback
> > - * to standby boot.
> > - */
> > - arche_platform_set_wake_detect_state(arche_pdata,
> > - WD_STATE_BOOT_INIT);
> > - }
> > + arche_platform_set_wake_detect_state(arche_pdata,
> > + WD_STATE_BOOT_INIT);
> > }
> >
> > +out:
> > spin_unlock_irqrestore(&arche_pdata->wake_lock, flags);
> >
> > return rc;
> > --
> > 2.34.1
> >
next prev parent reply other threads:[~2023-04-01 17:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-30 14:11 [PATCH 0/2] improve arche_platform_wd_irq() function Khadija Kamran
2023-03-30 14:11 ` [PATCH 1/2] staging: greybus: add a single exit path to arche_platform_wd_irq() Khadija Kamran
2023-04-03 0:37 ` Ira Weiny
2023-04-03 1:21 ` Khadija Kamran
2023-04-03 3:07 ` Alison Schofield
2023-04-03 3:15 ` Alison Schofield
2023-04-03 14:59 ` Ira Weiny
2023-03-30 14:11 ` [PATCH 2/2] staging: greybus: refactor arche_platform_wd_irq() Khadija Kamran
2023-03-30 15:23 ` Dan Carpenter
2023-04-01 17:41 ` Khadija Kamran [this message]
2023-04-03 4:29 ` Dan Carpenter
2023-04-03 15:23 ` Dan Carpenter
2023-04-27 6:27 ` Khadija Kamran
2023-05-03 22:16 ` Alison Schofield
2023-04-03 2:18 ` Ira Weiny
2023-03-30 16:58 ` kernel test robot
2023-04-03 0:36 ` [PATCH 0/2] improve arche_platform_wd_irq() function Ira Weiny
2023-04-03 1:18 ` Khadija Kamran
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=ZChs5jB7DMCUnVzr@khadija-virtual-machine \
--to=kamrankhadijadj@gmail.com \
--cc=alison.schofield@intel.com \
--cc=elder@kernel.org \
--cc=error27@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=greybus-dev@lists.linaro.org \
--cc=hvaibhav.linux@gmail.com \
--cc=johan@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=outreachy@lists.linux.dev \
/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 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).