[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190915010852.GG13407@t560>
Date: Sat, 14 Sep 2019 20:08:52 -0500
From: Corey Minyard <minyard@....org>
To: Jes Sorensen <jes.sorensen@...il.com>
Cc: openipmi-developer@...ts.sourceforge.net, kernel-team@...com,
linux-kernel@...r.kernel.org
Subject: Re: [Openipmi-developer] [PATCH 0/1] Fix race in ipmi timer cleanup
>
> >
> > {disable,enable}_si_irq() themselves are racy:
> >
> > static inline bool disable_si_irq(struct smi_info *smi_info)
> > {
> > if ((smi_info->io.irq) && (!smi_info->interrupt_disabled)) {
> > smi_info->interrupt_disabled = true;
> >
> > Basically interrupt_disabled need to be atomic here to have any value,
> > unless you ensure to have a spin lock around every access to it.
>
> It needs to be atomic, yes, but I think just adding the spinlock like
> I suggested will work. You are right, the check for timer_running is
> not necessary here, and I'm fine with removing it, but there are other
> issues with interrupt_disabled (as you said) and with memory ordering
> in the timer case. So even if you remove the timer running check, the
> lock is still required here.
It turns out you were right, all that really needs to be done is the
del_timer_sync(). I've added your patch to my queue.
Sorry for the trouble.
Thanks,
-corey
Powered by blists - more mailing lists