On 2020-10-28 14:44:53 [+0000], Christoph Hellwig wrote:
> On Wed, Oct 28, 2020 at 03:12:51PM +0100, Sebastian Andrzej Siewior wrote:
> >  static int blk_softirq_cpu_dead(unsigned int cpu)
> >  {
> > -   /*
> > -    * If a CPU goes away, splice its entries to the current CPU
> > -    * and trigger a run of the softirq
> > -    */
> > -   local_irq_disable();
> > -   list_splice_init(&per_cpu(blk_cpu_done, cpu),
> > -                    this_cpu_ptr(&blk_cpu_done));
> > -   raise_softirq_irqoff(BLOCK_SOFTIRQ);
> > -   local_irq_enable();
> > -
> > +   blk_complete_reqs(&per_cpu(blk_cpu_done, cpu));
> >     return 0;
> 
> How can this be preempted?  Can't we keep using this_cpu_ptr here?

cpu of the dead CPU != this CPU.

Sebastian

Reply via email to