Keith and the list... Using kdb 4.4...
I am working on taking some of Ingo's realtime patches and getting KDB to work properly with them. The first of this step is the CONFIG_PREEMPT_DESKTOP, which is also in standard kernel.org. I had a question about the purpose of disabling/enabling the bottom halves in kdb(). I find that if I have this code in the tree, and then run "ss" and then "go" the system preemption count gets skewed. This causes all kinds of bad mojo with the scheduler and basically breaks the system. I tracked the preemption to a local_bh_disable that is done when single step is started. But it is not undone when kdb returns, which causes an interrupt preemption count to get off track in the 8250 serial interrupt handler. I am not sure, but this problem may be visible on standard kernel.org with standard kdb 4.4 with 8250 serial enabled when running with preemption. I took out the local_bh_disable/local_bh_enable entirely from kdb() function, and single step works like a champ. My question is, what is the purpose of that usage? Just to shut off softirq processing while KDB is running? The root of the problem is that the softirq preemption count is overloaded to specify when bh's should be disabled, but the softirq preemption count is used by other parts of the scheduler without this overload in mind. I was thinking of hacking in an additional flag which identifies if "bottom halves are disabled" especially for kdb without setting the overloaded preemption count value. Do you have other ideas? Is the disable/enable really needed? Why not reenable on single step? Thanks -steve --------------------------- Use http://oss.sgi.com/ecartis to modify your settings or to unsubscribe.
