lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20171206110503.GO21780@piout.net> Date: Wed, 6 Dec 2017 12:05:03 +0100 From: Alexandre Belloni <alexandre.belloni@...e-electrons.com> To: linux-kernel-dev@...khoff.com Cc: Shawn Guo <shawnguo@...nel.org>, Sascha Hauer <kernel@...gutronix.de>, Alessandro Zummo <a.zummo@...ertech.it>, Patrick Bruenn <p.bruenn@...khoff.com>, Rob Herring <robh+dt@...nel.org>, Mark Rutland <mark.rutland@....com>, "open list:REAL TIME CLOCK (RTC) SUBSYSTEM" <linux-rtc@...r.kernel.org>, "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@...r.kernel.org>, open list <linux-kernel@...r.kernel.org>, Fabio Estevam <fabio.estevam@....com>, Juergen Borleis <jbe@...gutronix.de>, Noel Vellemans <Noel.Vellemans@...ionbms.com>, Russell King <linux@...linux.org.uk>, "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@...ts.infradead.org>, Philippe Ombredanne <pombredanne@...b.com>, Lothar Waßmann <LW@...O-electronics.de> Subject: Re: [PATCH v2 5/5] rtc: add mxc driver for i.MX53 SRTC On 05/12/2017 at 15:06:46 +0100, linux-kernel-dev@...khoff.com wrote: > +/* This function is the RTC interrupt service routine. */ > +static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id) > +{ > + struct platform_device *pdev = dev_id; > + struct mxc_rtc_data *pdata = platform_get_drvdata(pdev); > + void __iomem *ioaddr = pdata->ioaddr; > + unsigned long flags; > + u32 events = 0; > + u32 lp_status; > + u32 lp_cr; > + > + spin_lock_irqsave(&pdata->lock, flags); > + if (clk_prepare_enable(pdata->clk)) { > + spin_unlock_irqrestore(&pdata->lock, flags); > + return IRQ_NONE; > + } > + > + lp_status = readl(ioaddr + SRTC_LPSR); > + lp_cr = readl(ioaddr + SRTC_LPCR); > + > + /* update irq data & counter */ > + if (lp_status & SRTC_LPSR_ALP) { > + if (lp_cr & SRTC_LPCR_ALP) > + events = (RTC_AF | RTC_IRQF); I would just call rtc_update_irq here... > + > + /* disable further lp alarm interrupts */ > + lp_cr &= ~(SRTC_LPCR_ALP | SRTC_LPCR_WAE); > + } > + > + /* Update interrupt enables */ > + writel(lp_cr, ioaddr + SRTC_LPCR); > + > + /* clear interrupt status */ > + writel(lp_status, ioaddr + SRTC_LPSR); > + > + mxc_rtc_sync_lp_locked(ioaddr); > + rtc_update_irq(pdata->rtc, 1, events); ... because calling it here with events == 0 will result in a lot of work for nothing (the core will walk through the timers and set the alarm again). -- Alexandre Belloni, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
Powered by blists - more mailing lists