All of lore.kernel.org
 help / color / mirror / Atom feed
From: George Anzinger <george@mvista.com>
To: Tom Rini <trini@kernel.crashing.org>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>,
	kgdb-bugreport@lists.sourceforge.net,
	"Amit S. Kale" <amitkale@emsyssoft.com>,
	Pavel Machek <pavel@suse.cz>
Subject: Re: [Kgdb-bugreport] [PATCH] Kill kgdb_serial
Date: Tue, 02 Mar 2004 14:02:16 -0800	[thread overview]
Message-ID: <40450468.2090700@mvista.com> (raw)
In-Reply-To: <20040302213901.GF20227@smtp.west.cox.net>

Tom Rini wrote:
> Hello.  The following interdiff kills kgdb_serial in favor of function
> names.  This only adds a weak function for kgdb_flush_io, and documents
> when it would need to be provided.

It looks like you are also dumping any notion of building a kernel that can 
choose which method of communication to use for kgdb at run time.  Is this so?

-g
> 
> diff -u linux-2.6.3/drivers/net/kgdb_eth.c linux-2.6.3/drivers/net/kgdb_eth.c
> --- linux-2.6.3/drivers/net/kgdb_eth.c	2004-02-27 14:16:02.339413768 -0700
> +++ linux-2.6.3/drivers/net/kgdb_eth.c	2004-03-02 14:31:41.267262668 -0700
> @@ -72,7 +72,7 @@
>  	.remote_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
>  };
>  
> -int eth_getDebugChar(void)
> +int kgdb_read_debug_char(void)
>  {
>  	int chr;
>  
> @@ -85,7 +85,7 @@
>  	return chr;
>  }
>  
> -void eth_flushDebugChar(void)
> +void kgdb_flush_io(void)
>  {
>  	if (out_count && np.dev) {
>  		netpoll_send_udp(&np, out_buf, out_count);
> @@ -94,11 +94,11 @@
>  	}
>  }
>  
> -void eth_putDebugChar(int chr)
> +void kgdb_write_debug_char(int chr)
>  {
>  	out_buf[out_count++] = chr;
>  	if (out_count == OUT_BUF_SIZE)
> -		eth_flushDebugChar();
> +		kgdb_flush_io();
>  }
>  
>  static void rx_hook(struct netpoll *np, int port, char *msg, int len)
> @@ -137,7 +137,7 @@
>  
>  __setup("kgdboe=", option_setup);
>  
> -static int hook(void)
> +static int kgdb_hook_io(void)
>  {
>  	/* Un-initalized, don't go further. */
>  	if (kgdboe != 1)
> @@ -148,19 +148,11 @@
>  	return 0;
>  }
>  
> -struct kgdb_serial kgdbeth_serial = {
> -	.read_char = eth_getDebugChar,
> -	.write_char = eth_putDebugChar,
> -	.hook = hook,
> -	.flush = eth_flushDebugChar,
> -};
> -
>  static int init_kgdboe(void)
>  {
>  	if (!np.remote_ip || netpoll_setup(&np))
>  		return 1;
>  
> -	kgdb_serial = &kgdbeth_serial;
>  	kgdboe = 1;
>  	printk(KERN_INFO "kgdb: debugging over ethernet enabled\n");
>  
> diff -u linux-2.6.3/drivers/serial/kgdb_8250.c linux-2.6.3/drivers/serial/kgdb_8250.c
> --- linux-2.6.3/drivers/serial/kgdb_8250.c	2004-03-01 08:12:18.293899848 -0700
> +++ linux-2.6.3/drivers/serial/kgdb_8250.c	2004-03-02 14:31:59.210205936 -0700
> @@ -128,7 +128,7 @@
>   * Wait until the interface can accept a char, then write it.
>   */
>  void
> -kgdb_put_debug_char(int chr)
> +kgdb_write_debug_char(int chr)
>  {
>  	while (!(serial_inb(kgdb8250_port + (UART_LSR << reg_shift)) &
>  		UART_LSR_THRE))
> @@ -154,7 +154,7 @@
>  	 */
>  	if (it & 0xc) {
>  		kgdb8250_init();
> -		kgdb_put_debug_char('-');
> +		kgdb_write_debug_char('-');
>  		return '-';
>  	}
>  
> @@ -167,7 +167,7 @@
>   */
>  
>  int
> -kgdb_get_debug_char(void)
> +kgdb_read_debug_char(void)
>  {
>  	int retchr;
>  	unsigned long flags;
> @@ -379,12 +379,6 @@
>  	return 0;
>  }
>  
> -struct kgdb_serial kgdb8250_serial_driver = {
> -	.read_char = kgdb_get_debug_char,
> -	.write_char = kgdb_put_debug_char,
> -	.hook = kgdb_hook_io,
> -};
> -
>  void
>  kgdb8250_add_port(int i, struct uart_port *serial_req)
>  {
> @@ -422,8 +416,6 @@
>  	/* Make the baud rate change happen. */
>  	gdb_async_info.state->custom_divisor = BASE_BAUD / kgdb8250_baud;
>  
> -	kgdb_serial = &kgdb8250_serial_driver;
> -
>  	return 1;
>  
>        errout:
> diff -u linux-2.6.3/arch/ppc/kernel/kgdb.c linux-2.6.3/arch/ppc/kernel/kgdb.c
> --- linux-2.6.3/arch/ppc/kernel/kgdb.c	2004-03-01 10:01:48.164203161 -0700
> +++ linux-2.6.3/arch/ppc/kernel/kgdb.c	2004-03-02 14:26:16.330767482 -0700
> @@ -263,27 +263,21 @@
>  };
>  
>  #ifdef CONFIG_PPC_SIMPLE_SERIAL
> -static void kgdbppc_write_char(int chr)
> +static void kgdb_write_debug_char(int chr)
>  {
>  	putDebugChar(chr);
>  }
>  
> -static int kgdbppc_read_char(void)
> +static int kgdb_read_debug_char(void)
>  {
>  	return getDebugChar();
>  }
>  
> -int kgdbppc_hook(void)
> +int kgdb_hook_io(void)
>  {
>  	kgdb_map_scc();
>  	return 0;
>  }
> -
> -struct kgdb_serial kgdbppc_serial = {
> -	.read_char = kgdbppc_read_char,
> -	.write_char = kgdbppc_write_char,
> -	.hook = kgdbppc_hook
> -};
>  #endif
>  
>  int kgdb_arch_init (void)
> @@ -295,14 +289,4 @@
>  	debugger_dabr_match = kgdb_dabr_match;
>  
> -	/* If we have the bigger 8250 serial driver, set that to be
> -	 * the output now. */
> -#if defined(CONFIG_KGDB_8250)
> -        extern struct kgdb_serial kgdb8250_serial_driver;
> -        kgdb_serial = &kgdb8250_serial_driver;
> -#elif defined(CONFIG_PPC_SIMPLE_SERIAL)
> -	/* Take our serial driver. */
> -	kgdb_serial = &kgdbppc_serial;
> -#endif
> -
>  	return 0;
>  }
> diff -u linux-2.6.3/include/linux/kgdb.h linux-2.6.3/include/linux/kgdb.h
> --- linux-2.6.3/include/linux/kgdb.h	2004-03-01 08:19:06.668218454 -0700
> +++ linux-2.6.3/include/linux/kgdb.h	2004-03-02 14:27:05.880556965 -0700
> @@ -102,14 +102,12 @@
>  /* Thread reference */
>  typedef unsigned char threadref[8];
>  
> -struct kgdb_serial {
> -	int (*read_char) (void);
> -	void (*write_char) (int);
> -	void (*flush) (void);
> -	int (*hook) (void);
> -};
> +/* I/O */
> +extern int kgdb_read_debug_char(void);
> +extern void kgdb_write_debug_char(int ch);
> +extern void kgdb_flush_io(void);
> +extern int kgdb_hook_io(void);
>  
> -extern struct kgdb_serial *kgdb_serial;
>  extern struct kgdb_arch arch_kgdb_ops;
>  extern int kgdb_initialized;
>  
> diff -u linux-2.6.3/kernel/kgdb.c linux-2.6.3/kernel/kgdb.c
> --- linux-2.6.3/kernel/kgdb.c	2004-03-01 08:19:06.672217551 -0700
> +++ linux-2.6.3/kernel/kgdb.c	2004-03-02 14:25:42.590401068 -0700
> @@ -73,8 +73,6 @@
>   * also at runtime. */
>  int kgdb_useraccess = 0;
>  
> -struct kgdb_serial *kgdb_serial;
> -
>  /*
>   * Holds information about breakpoints in a kernel. These breakpoints are
>   * added and removed by gdb.
> @@ -105,8 +103,7 @@
>   * The following are the stub functions for code which is arch specific
>   * and can be omitted on some arches
>   * This function will handle the initalization of any architecture specific
> - * hooks.  If there is a suitable early output driver, kgdb_serial
> - * can be pointed at it now.
> + * hooks.
>   */
>  int __attribute__ ((weak))
>      kgdb_arch_init(void)
> @@ -190,6 +187,17 @@
>  	return NULL;
>  }
>  
> +/*
> + * An I/O driver must provide routines for reading and writing a single
> + * character.  However, if characters are buffered, a method to flush them
> + * must be provided.  The following is used as the default when a flush
> + * is a nop.
> + */
> +void __attribute__ ((weak))
> +	kgdb_flush_io(void)
> +{
> +}
> +
>  static int hex(char ch)
>  {
>  	if ((ch >= 'a') && (ch <= 'f'))
> @@ -213,7 +221,7 @@
>  	do {
>  		/* wait around for the start character, ignore all other
>  		 * characters */
> -		while ((ch = (kgdb_serial->read_char() & 0x7f)) != '$')
> +		while ((ch = (kgdb_read_debug_char() & 0x7f)) != '$')
>  			;	/* Spin. */
>  		kgdb_connected = 1;
>  		checksum = 0;
> @@ -223,7 +231,7 @@
>  
>  		/* now, read until a # or end of buffer is found */
>  		while (count < (BUFMAX - 1)) {
> -			ch = kgdb_serial->read_char() & 0x7f;
> +			ch = kgdb_read_debug_char() & 0x7f;
>  			if (ch == '#')
>  				break;
>  			checksum = checksum + ch;
> @@ -233,15 +241,14 @@
>  		buffer[count] = 0;
>  
>  		if (ch == '#') {
> -			xmitcsum = hex(kgdb_serial->read_char() & 0x7f) << 4;
> -			xmitcsum += hex(kgdb_serial->read_char() & 0x7f);
> +			xmitcsum = hex(kgdb_read_debug_char() & 0x7f) << 4;
> +			xmitcsum += hex(kgdb_read_debug_char() & 0x7f);
>  
>  			if (checksum != xmitcsum)
> -				kgdb_serial->write_char('-');	/* failed checksum */
> +				kgdb_write_debug_char('-');	/* failed checksum */
>  			else
> -				kgdb_serial->write_char('+');	/* successful transfer */
> -			if (kgdb_serial->flush)
> -				kgdb_serial->flush();
> +				kgdb_write_debug_char('+');	/* successful transfer */
> +			kgdb_flush_io();
>  		}
>  	} while (checksum != xmitcsum);
>  }
> @@ -258,27 +265,26 @@
>  
>  	/*  $<packet info>#<checksum>. */
>  	while (1) {
> -		kgdb_serial->write_char('$');
> +		kgdb_write_debug_char('$');
>  		checksum = 0;
>  		count = 0;
>  
>  		while ((ch = buffer[count])) {
> -			kgdb_serial->write_char(ch);
> +			kgdb_write_debug_char(ch);
>  			checksum += ch;
>  			count++;
>  		}
>  
> -		kgdb_serial->write_char('#');
> -		kgdb_serial->write_char(hexchars[checksum >> 4]);
> -		kgdb_serial->write_char(hexchars[checksum % 16]);
> -		if (kgdb_serial->flush)
> -			kgdb_serial->flush();
> +		kgdb_write_debug_char('#');
> +		kgdb_write_debug_char(hexchars[checksum >> 4]);
> +		kgdb_write_debug_char(hexchars[checksum % 16]);
> +		kgdb_flush_io();
>  
>  		/* Now see what we get in reply. */
> -		ch = kgdb_serial->read_char();
> +		ch = kgdb_read_debug_char();
>  
>  		if (ch == 3)
> -			ch = kgdb_serial->read_char();
> +			ch = kgdb_read_debug_char();
>  
>  		/* If we get an ACK, we are done. */
>  		if (ch == '+')
> @@ -289,9 +295,8 @@
>  		 * the packet being sent, and stop trying to send this
>  		 * packet. */
>  		if (ch == '$') {
> -			kgdb_serial->write_char('-');
> -			if (kgdb_serial->flush)
> -				kgdb_serial->flush();
> +			kgdb_write_debug_char('-');
> +			kgdb_flush_io();
>  			return;
>  		}
>  	}
> @@ -1126,10 +1131,10 @@
>  
>  	atomic_set(&kgdb_setting_breakpoint, 0);
>  
> -	if (!kgdb_serial || kgdb_serial->hook() < 0) {
> +	if (kgdb_hook_io())
>  		/* KGDB interface isn't ready yet */
>  		return;
> -	}
> +
>  	kgdb_initialized = 1;
>  	if (!kgdb_enter) {
>  		return;
> 

-- 
George Anzinger   george@mvista.com
High-res-timers:  http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml


  reply	other threads:[~2004-03-02 22:02 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-02 21:39 [PATCH] Kill kgdb_serial Tom Rini
2004-03-02 22:02 ` George Anzinger [this message]
2004-03-02 22:11   ` [Kgdb-bugreport] " Tom Rini
2004-03-02 22:31     ` Pavel Machek
2004-03-02 22:41       ` Tom Rini
2004-03-02 23:00       ` Tom Rini
2004-03-02 23:35         ` Pavel Machek
2004-03-03 15:22           ` Tom Rini
2004-03-03 15:51             ` Pavel Machek
2004-03-03 16:04               ` Tom Rini
2004-03-04  0:34                 ` George Anzinger
2004-03-04  5:01                   ` Amit S. Kale
2004-03-04 22:02                     ` George Anzinger
2004-03-04 22:48                     ` Tom Rini
2004-03-02 23:46         ` George Anzinger
2004-03-02 23:52           ` Tom Rini
2004-03-03  0:36             ` George Anzinger
2004-03-03 15:20               ` Tom Rini
2004-03-04  0:30                 ` George Anzinger
2004-03-03  5:43           ` Amit S. Kale
2004-03-03 15:16             ` Tom Rini
2004-03-04  0:27               ` George Anzinger
2004-03-04 15:17                 ` Tom Rini
2004-03-04 22:18                   ` George Anzinger
2004-03-04 22:49                     ` Tom Rini
2004-03-04  4:41               ` Amit S. Kale
2004-03-04 15:27                 ` Tom Rini
2004-03-04 23:06                   ` George Anzinger
2004-03-04 23:17                     ` Tom Rini
2004-03-11 21:33                       ` George Anzinger
2004-03-11 22:33                         ` Tom Rini
2004-03-11 22:53                           ` George Anzinger
2004-03-11 23:00                             ` Tom Rini
2004-03-11 23:46                               ` George Anzinger
2004-03-12  4:52                                 ` Amit S. Kale
2004-03-12  4:48                             ` Amit S. Kale
2004-03-03 15:26         ` Matt Mackall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40450468.2090700@mvista.com \
    --to=george@mvista.com \
    --cc=amitkale@emsyssoft.com \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@suse.cz \
    --cc=trini@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.