Re: Is notify_die being overloaded?

Keshavamurthy Anil S
2006-04-17T16:48:45Z

On Thu, Apr 13, 2006 at 02:46:44PM -0500, Robin Holt wrote:
> notify_die seems to be called to indicate the machine is going down as
> well as there are trapped events for the process.
>
> Specifically, the following call notify_die when there are machine
> related events:
> ia64_mca_rendez_int_handler (DIE_MCA_RENDZVOUS_ENTER,
> DIE_MCA_RENDZVOUS_PROCESS, DIE_MCA_RENDZVOUS_LEAVE)
> ia64_mca_handler (DIE_MCA_MONARCH_ENTER, DIE_MCA_MONARCH_PROCESS,
> DIE_MCA_MONARCH_LEAVE)
> ia64_init_handler (DIE_INIT_ENTER,
> DIE_INIT_{SLAVE|MONARCH}_{ENTER|PROCESS|LEAVE})
> ia64_mca_init (DIE_MCA_NEW_TIMEOUT)
> machine_restart (DIE_MACHINE_RESTART)
> machine_halt (DIE_MACHINE_HALT)
> die (DIE_OOPS)
>
>
> The following seem to be process related:
> ia64_bad_break (DIE_BREAK, DIE_FAULT)
> ia64_do_page_fault (DIE_PAGE_FAULT)
>
>
> Shouldn't these really be seperated into two seperate notifier chains?
> One for OS level die() type activity and another for process faults
> which a debugger et. al. would want to know about?
>
> The specific concern is some testing we have been doing with an upcoming
> OSD release. We see notify_die being called from ia64_do_page_fault
> frequently in our performance samples. On these machines, xpc has
> registers a die notifier and therefore callouts are occuring which have
> no relationship to a processes page faulting. XPC is looking for events
> which indicate the OS is stopping. Additionally, kdb is installed on
> this machine as well and it has registered a die notifier as well.

Since DIE_PAGE_FAULT is the one which come in performance path, I think
this should be optimised and I would suggest just making
notify_die(DIE_PAGE_FAULT,..) into a seperate notifier chains (something like
notify_page_fault() which calls just the registered handlers).
In this way, in the performance critical path, we will be calling only the
required handlers(probally only the kprobes handlers) and not the whole world
registered on notify_die() call chain.

-thanks,
Anil