Boris Ostrovsky <boris.ostrov...@oracle.com> writes:

> On 5/20/20 3:16 PM, Thomas Gleixner wrote:
>
>
>> +__visible noinstr void xen_pv_evtchn_do_upcall(struct pt_regs *regs)
>> +{
>> +    struct pt_regs *old_regs;
>> +    bool inhcall;
>> +
>> +    idtentry_enter(regs);
>> +    old_regs = set_irq_regs(regs);
>> +
>> +    run_on_irqstack(__xen_pv_evtchn_do_upcall, NULL, regs);
>
>
> We need to handle nested case (i.e. !irq_needs_irq_stack(), like in your
> original version). Moving get_and_clear_inhcall() up should prevent
> scheduling when this happens.

I locally changed run_on_irqstack() to do the magic checks and select the
right one.

Thanks,

        tglx

Reply via email to