> -----Original Message----- > From: Miquel Raynal > Sent: Friday, July 16, 2021 6:52 > To: Clark Wang > Cc: conor.culhane@silvaco.com; alexandre.belloni@bootlin.com; > vitor.soares@synopsys.com; boris.brezillon@bootlin.com; linux- > i3c@lists.infradead.org; linux-kernel@vger.kernel.org > Subject: Re: [PATCH 2/4] i3c: master: svc: fix atomic issue > > Hi Clark, > > Clark Wang wrote on Thu, 15 Jul 2021 16:24:11 > +0800: > > > do_daa_locked() function is in a spin lock environment, use > > readl_poll_timeout_atomic() to replace the origin > > readl_poll_timeout(). > > > > Signed-off-by: Clark Wang > > --- > > drivers/i3c/master/svc-i3c-master.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/i3c/master/svc-i3c-master.c > > b/drivers/i3c/master/svc-i3c-master.c > > index c25a372f6820..9d80435638ea 100644 > > --- a/drivers/i3c/master/svc-i3c-master.c > > +++ b/drivers/i3c/master/svc-i3c-master.c > > @@ -656,7 +656,7 @@ static int svc_i3c_master_readb(struct > svc_i3c_master *master, u8 *dst, > > u32 reg; > > > > for (i = 0; i < len; i++) { > > - ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, > reg, > > + ret = readl_poll_timeout_atomic(master->regs + > SVC_I3C_MSTATUS, > > +reg, > > SVC_I3C_MSTATUS_RXPEND(reg), 0, > 1000); > > You forgot to align the parameters of the function here and below. Oh, sorry about this. I will send V2 to correct this. By the way, can you help to check the question I mentioned in the cover letter? Thank you very much! Best Regards, Clark Wang > > Otherwise, > > Reviewed-by: Miquel Raynal > > > if (ret) > > return ret; > > @@ -687,7 +687,7 @@ static int svc_i3c_master_do_daa_locked(struct > svc_i3c_master *master, > > * Either one slave will send its ID, or the assignment process > > * is done. > > */ > > - ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, > reg, > > + ret = readl_poll_timeout_atomic(master->regs + > SVC_I3C_MSTATUS, > > +reg, > > SVC_I3C_MSTATUS_RXPEND(reg) | > > > SVC_I3C_MSTATUS_MCTRLDONE(reg), > > 1, 1000); > > @@ -744,7 +744,7 @@ static int svc_i3c_master_do_daa_locked(struct > svc_i3c_master *master, > > } > > > > /* Wait for the slave to be ready to receive its address */ > > - ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, > reg, > > + ret = readl_poll_timeout_atomic(master->regs + > SVC_I3C_MSTATUS, > > +reg, > > > SVC_I3C_MSTATUS_MCTRLDONE(reg) && > > SVC_I3C_MSTATUS_STATE_DAA(reg) > && > > SVC_I3C_MSTATUS_BETWEEN(reg), > > > > > Thanks, > Miquèl