>> Just need to postpone schedule_work to the slave CPU exiting the NMI context.
>>
>> irq_work will only respond to handle schedule_work after exiting the current 
>> interrupt context.
>>
>> When the master CPU exits the interrupt context, other CPUs will naturally 
>> exit the NMI context, so there will be no deadlock.
>>
>> It is the call to input_register_handler() that forces us not to do the work 
>> from irq_work's hardirq callback.
>>
>> Therefore schedule another work in the irq_work and not do the job directly.
>
>This looks like it was copy and pasted from the e-mail thread without any 
>editing to make it make any sense. It not even formatted correctly (where are 
>the line breaks?).
>
>How about:
>
>We fix the problem by using irq_work to call schedule_work() instead of 
>calling it directly. irq_work is an NMI-safe deferred work framework that 
>performs the requested work from a hardirq context (usually an IPI but it can 
>be timer interrupt on some architectures).
>
>Note that we still need to  a workqueue since we cannot resync the keyboard 
>state from the hardirq context provided by irq_work.
>That must be done from task context for the calls into the input subystem. 
>Hence we must defer the work twice. First to safely switch from the debug trap 
>(NMI-like context) to hardirq and then, secondly, to get from hardirq to the 
>system workqueue.

I apologize for my poor writing skills, your answer is more professional and 
accurate. I will replace this part with your description in the V6.



_______________________________________________
Kgdb-bugreport mailing list
Kgdb-bugreport@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport

Reply via email to