> -----Original Message-----
> From: Sergei Shtylyov [mailto:[EMAIL PROTECTED] 
> 
>     It is not limited to KGDBoE.

You are correct.  This is a generic problem with kgdbwait on x86_64.

> > Perhaps you can experiment a bit further, and report back 
> as I do not 
> > have your exact setup with SMP on x86_64 at the moment?
> 
>     Well, this would explain why this has gone unnoticed so far. :-)

I setup a an SMP x86_64 system and yes indeed there is a significant
problem there.

I further tested the patches I created, and they fix both cases for
kgdbwait.  On x86_64 the rs232 automatically becomes a late init device
because it requires the exception stack be available to issue a
breakpoint().  Another way to make a change that is KGDB specific for
this arch if early init is still truly needed for the rs232 is to add
kgdb specific code right after the place that the exception stack is
initialized.


> --------------------------------------------------------------
> ----------
> >  kernel/kgdb.c |   23 +++++++++++------------
> >  1 file changed, 11 insertions(+), 12 deletions(-)
> > 
> > Index: linux-2.6.21-standard/kernel/kgdb.c
> > ===================================================================
> > --- linux-2.6.21-standard.orig/kernel/kgdb.c
> > +++ linux-2.6.21-standard/kernel/kgdb.c
> > @@ -1788,17 +1788,6 @@ late_initcall(kgdb_late_entry);
> >   */
> >  void breakpoint(void)
> >  {
> > -   if (kgdb_initialized != 1) {
> > -           kgdb_early_entry();
> > -           if (kgdb_initialized == 1)
> > -                   printk(KERN_CRIT "Waiting for 
> connection from remote "
> > -                          "gdb...\n");
> > -           else {
> > -                   printk(KERN_CRIT "KGDB cannot 
> initialize I/O yet.\n");
> > -                   return;
> > -           }
> > -   }
> > -
> >     atomic_set(&kgdb_setting_breakpoint, 1);
> >     wmb();
> >     BREAKPOINT();
> > @@ -1883,7 +1872,17 @@ static int __init opt_kgdb_enter(char *s
> >     if (kgdb_initialized)
> >             return 0;
> >  
> > -   /* Call breakpoint() which will take care of init. */
> > +   if (kgdb_initialized != 1) {
> > +           kgdb_early_entry();
> > +           if (kgdb_initialized == 1)
> > +                   printk(KERN_CRIT "Waiting for 
> connection from remote "
> > +                          "gdb...\n");
> > +           else {
> > +                   printk(KERN_CRIT "KGDB cannot 
> initialize I/O yet.\n");
> > +                   return;
> > +           }
> > +   }
> > +
> >     breakpoint();
> 
>     I don't see how this might help.

This patch does directly have to do with the problem however it does fix
a problem where breakpoint() references a function which is in the
.init_text and this generates a warning with the latest rc kernels.
Also moving the function into the early init makes for the situation
where the low level initialization can only get called one time as a
part of the init sequence.

> 
> --------------------------------------------------------------
> ----------
> >  kernel/kgdb.c |   11 ++++++-----
> >  1 file changed, 6 insertions(+), 5 deletions(-)
> > 
> > Index: linux-2.6.21-standard/kernel/kgdb.c
> > ===================================================================
> > --- linux-2.6.21-standard.orig/kernel/kgdb.c
> > +++ linux-2.6.21-standard/kernel/kgdb.c
> > @@ -1682,20 +1682,21 @@ DECLARE_TASKLET(kgdb_tasklet_breakpoint,
> >   */
> >  static void __init kgdb_early_entry(void)  {
> > +   /* Let the architecture do any setup that it needs to. */
> > +   kgdb_arch_init();
> > +
> >     /*
> >      * Don't try and do anything until the architecture is able to
> >      * setup the exception stack.  In this case, it is up to the
> >      * architecture to hook in and look at us when they are ready.
> >      */
> > +
> >     if(!CHECK_EXCEPTION_STACK()) {
> >             kgdb_initialized = -1;
> > -           tasklet_schedule(&kgdb_tasklet_breakpoint);
> > +           /* any kind of break point is deferred to late_init */
> >             return;

Note I removed the tasklet and it is put into a late breakpoint() call.
I had tried out both kgdb over rs232 and kgdboe on the x86_64 SMP with
kgdbwait and it works now with no hang at boot.

Jason.

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Kgdb-bugreport mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport

Reply via email to