lkml.org 
[lkml]   [2004]   [Jan]   [23]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateFri, 23 Jan 2004 09:18:22 +0100
FromPavel Machek <>
SubjectFYI: kgdb 2.1.0 interdiff
Hi!

[I hope these are usefull to someone? They do not contain ppc and
serial].

entry.S change is interesting... and it changes do_IRQ() calling
convention. Perhaps that change should be pushed to Andrew? It is
"interesting" to have different do_IRQ in case of kgdb...

							Pavel

@@ -67,8 +67,8 @@

 Index: linux/arch/i386/kernel/entry.S
 ===================================================================
---- linux.orig/arch/i386/kernel/entry.S	2004-01-20 14:28:44.000000000 +0100
-+++ linux/arch/i386/kernel/entry.S	2004-01-20 14:29:19.000000000 +0100
+--- linux.orig/arch/i386/kernel/entry.S	2004-01-23 09:04:23.000000000 +0100
++++ linux/arch/i386/kernel/entry.S	2004-01-23 09:05:16.000000000 +0100
 @@ -226,7 +226,7 @@
  	jz restore_all
  	movl $PREEMPT_ACTIVE,TI_PRE_COUNT(%ebp)
@@ -87,7 +87,25 @@
  	cli				# make sure we don't miss an interrupt
  					# setting need_resched or sigpending
  					# between sampling and the iret
-@@ -606,6 +606,31 @@
+@@ -399,7 +399,17 @@
+ 	ALIGN
+ common_interrupt:
+ 	SAVE_ALL
++	movl %esp, %eax
++/* Create a fake function call followed by a fake function prologue to fool
++ * gdb into believing that this is a normal function call. */
++	pushl EIP(%eax)
++
++common_interrupt_1:
++	pushl %ebp
++	movl %esp, %ebp
++	pushl %eax
+ 	call do_IRQ
++	addl $12, %esp
+ 	jmp ret_from_intr
+ 
+ #define BUILD_INTERRUPT(name, nr)	\
+@@ -606,6 +616,31 @@
  	pushl $do_spurious_interrupt_bug
  	jmp error_code
  
@@ -581,10 +599,41 @@
 +	.remove_break = i386_remove_hw_break,
 +	.correct_hw_break = i386_correct_hw_break,
 +};
+Index: linux/arch/i386/kernel/irq.c
+===================================================================
+--- linux.orig/arch/i386/kernel/irq.c	2004-01-09 20:26:08.000000000 +0100
++++ linux/arch/i386/kernel/irq.c	2004-01-23 09:05:16.000000000 +0100
+@@ -410,7 +410,7 @@
+  * SMP cross-CPU interrupts have their own specific
+  * handlers).
+  */
+-asmlinkage unsigned int do_IRQ(struct pt_regs regs)
++asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
+ {	
+ 	/* 
+ 	 * We ack quickly, we don't want the irq controller
+@@ -422,7 +422,7 @@
+ 	 * 0 return value means that this irq is already being
+ 	 * handled by some other CPU. (or is disabled)
+ 	 */
+-	int irq = regs.orig_eax & 0xff; /* high bits used in ret_from_ code  */
++	int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code  */
+ 	irq_desc_t *desc = irq_desc + irq;
+ 	struct irqaction * action;
+ 	unsigned int status;
+@@ -488,7 +488,7 @@
+ 		irqreturn_t action_ret;
+ 
+ 		spin_unlock(&desc->lock);
+-		action_ret = handle_IRQ_event(irq, &regs, action);
++		action_ret = handle_IRQ_event(irq, regs, action);
+ 		spin_lock(&desc->lock);
+ 		if (!noirqdebug)
+ 			note_interrupt(irq, desc, action_ret);
 Index: linux/arch/i386/kernel/nmi.c
 ===================================================================
---- linux.orig/arch/i386/kernel/nmi.c	2004-01-20 14:28:44.000000000 +0100
-+++ linux/arch/i386/kernel/nmi.c	2004-01-20 14:29:19.000000000 +0100
+--- linux.orig/arch/i386/kernel/nmi.c	2004-01-23 09:04:23.000000000 +0100
++++ linux/arch/i386/kernel/nmi.c	2004-01-23 09:05:16.000000000 +0100
 @@ -25,6 +25,7 @@
  #include <linux/module.h>
  #include <linux/nmi.h>
@@ -2031,9 +2080,9 @@
  obj-$(CONFIG_VORTEX) += 3c59x.o
 Index: linux/drivers/net/kgdb_eth.c
 ===================================================================
---- linux.orig/drivers/net/kgdb_eth.c	2004-01-20 14:29:19.000000000 +0100
-+++ linux/drivers/net/kgdb_eth.c	2004-01-20 14:29:19.000000000 +0100
-@@ -0,0 +1,704 @@
+--- linux.orig/drivers/net/kgdb_eth.c	2004-01-23 09:05:16.000000000 +0100
++++ linux/drivers/net/kgdb_eth.c	2004-01-23 09:05:16.000000000 +0100
+@@ -0,0 +1,702 @@
 +/*
 + * Network interface GDB stub
 + *
@@ -2107,7 +2156,7 @@
 +struct net_device *kgdb_netdevice = NULL;
 +
 +/* Indicates dept of recursion for xmitlock hold */
-+static int xlockholdcount = 0;
++static int xlock_hold_count = 0;
 +
 +/* kgdb ethernet ring buffers. Increase the space if you get panics in
 + * kgdbeth_alloc_skb.
@@ -2122,7 +2171,7 @@
 +static struct sk_buff *send_skb;
 +static int bufnum;
 +
-+static char kgdb_netdevname[16];
++static char kgdb_netdev_name[16];
 +
 +#ifdef CONFIG_KGDB_CONSOLE
 +#error kgdb over ethernet is not yet ready for console messages.
@@ -2181,7 +2230,7 @@
 +
 +/* Holds xmitlock of the ethernet device 
 + * Recursive calls allowed */
-+static void kgdbeth_holdxlock(void)
++static void kgdbeth_lock(void)
 +{
 +	if (spin_is_locked(&kgdb_netdevice->xmit_lock)) {
 +		if (kgdb_netdevice->xmit_lock_owner == smp_processor_id()) {
@@ -2192,14 +2241,14 @@
 +	kgdb_netdevice->xmit_lock_owner = smp_processor_id();
 +
 +gotit:
-+	xlockholdcount++;
++	xlock_hold_count++;
 +}
 +
 +/* releases xmitlock of the ethernet device 
 + * Recursive calls allowed */
-+static void kgdbeth_relxlock(void)
++static void kgdbeth_unlock(void)
 +{
-+	if (--xlockholdcount) {
++	if (--xlock_hold_count) {
 +		kgdb_netdevice->xmit_lock_owner = -1;
 +		spin_unlock(&kgdb_netdevice->xmit_lock);
 +	}
@@ -2245,7 +2294,7 @@
 +	if (!(in_dev->ifa_list)) {
 +		panic("No interface address set for interface!\n");
 +	}
-+	kgdbeth_holdxlock();
++	kgdbeth_lock();
 +
 +	udp_len = len + sizeof(struct udphdr);
 +	ip_len = eth_len = udp_len + sizeof(struct iphdr);
@@ -2284,10 +2333,8 @@
 +	memcpy(eth->h_dest, kgdb_remotemac, kgdb_netdevice->addr_len);
 +
 +	kgdb_netdevice->hard_start_xmit(skb, kgdb_netdevice);
-+	if (atomic_read(&skb->users) != 1) {
-+		BUG();
-+	}
-+	kgdbeth_relxlock();
++	BUG_ON(atomic_read(&skb->users) != 1);
++	kgdbeth_unlock();
 +}
 +
 +static void kgdbeth_flush(void)
@@ -2317,10 +2364,10 @@
 +kgdb_eth_reply_arp(void)
 +{
 +	if (send_skb) {
-+		kgdbeth_holdxlock();
++		kgdbeth_lock();
 +	    	kgdb_netdevice->hard_start_xmit(send_skb, kgdb_netdevice);
 +		send_skb = NULL;
-+		kgdbeth_relxlock();
++		kgdbeth_unlock();
 +	}
 +}
 +
@@ -2391,7 +2438,7 @@
 +	}
 +	/* reply to the ARP request */
 +
-+	kgdbeth_holdxlock();
++	kgdbeth_lock();
 +	if (send_skb) {
 +		/* Get rid of any previous replies to ARP request. We hope
 +		 * that regular reply to ARP by network layers would have gone
@@ -2401,7 +2448,7 @@
 +	send_skb = kgdbeth_alloc_skb(sizeof(struct arphdr) +
 +			2 * (kgdb_netdevice->addr_len + 4) +
 +			LL_RESERVED_SPACE(kgdb_netdevice));
-+	kgdbeth_relxlock();
++	kgdbeth_unlock();
 +
 +	skb_reserve(send_skb, LL_RESERVED_SPACE(kgdb_netdevice));
 +	send_skb->nh.raw = send_skb->data;
@@ -2531,18 +2578,18 @@
 +	struct irqaction *ia_ptr;
 +	int i;
 +
-+	sprintf(kgdb_netdevname, "eth%d", kgdb_eth);
++	sprintf(kgdb_netdev_name, "eth%d", kgdb_eth);
 +
 +	for (kgdb_netdevice = dev_base;
 +		kgdb_netdevice != NULL;
 +		kgdb_netdevice = kgdb_netdevice->next) {
-+		if (strncmp(kgdb_netdevice->name, kgdb_netdevname, IFNAMSIZ) == 0) {
++		if (strncmp(kgdb_netdevice->name, kgdb_netdev_name, IFNAMSIZ) == 0) {
 +			break;
 +		}
 +	}
 +	if (!kgdb_netdevice) {
 +		printk("kgdbeth: Unable to find interface %s\n",
-+				kgdb_netdevname);
++				kgdb_netdev_name);
 +		return -ENODEV;
 +	}
 +	if (!(kgdb_netdevice->flags & IFF_UP)) {
@@ -2550,7 +2597,7 @@
 +	}
 +	ia_ptr = irq_desc[kgdb_netdevice->irq].action;
 +	while (ia_ptr) {
-+		if (!strncmp(kgdb_netdevname, ia_ptr->name, IFNAMSIZ)) {
++		if (!strncmp(kgdb_netdev_name, ia_ptr->name, IFNAMSIZ)) {
 +			kgdbeth_irqhandler = ia_ptr->handler;
 +			break;
 +		}
@@ -2558,7 +2605,7 @@
 +	}
 +	if (!kgdbeth_irqhandler) {
 +		printk("kgdbeth: Interface %s doesn't have an interrupt"
-+			" handler cannot use it\n", kgdb_netdevname);
++			" handler cannot use it\n", kgdb_netdev_name);
 +		return -EINVAL;
 +	}
 +	for (i = 0; i < NUM_SENDBUF; i++) {
@@ -2603,7 +2650,7 @@
 + * responded yet.
 + */
 +static void kgdbeth_begin_session(void) {
-+	kgdbeth_holdxlock();
++	kgdbeth_lock();
 +	disable_irq(kgdb_netdevice->irq);
 +	kgdb_eth_reply_arp();
 +}
@@ -2611,7 +2658,7 @@
 +static void kgdbeth_end_session(void)
 +{
 +	enable_irq(kgdb_netdevice->irq);
-+	kgdbeth_relxlock();
++	kgdbeth_unlock();
 +}
 +
 +struct kgdb_serial kgdbeth_serial = {
@@ -2661,7 +2708,7 @@
 +
 +int kgdbeth_event(struct notifier_block * self, unsigned long val, void * data)
 +{
-+	if (strcmp(((struct net_device *)data)->name, kgdb_netdevname)) {
++	if (strcmp(((struct net_device *)data)->name, kgdb_netdev_name)) {
 +		goto out;
 +	}
 +	if (val!= NETDEV_UP)
@@ -2740,8 +2787,8 @@
 +__setup("kgdbeth=", kgdbeth_opt);
 Index: linux/include/asm-i386/kgdb.h
 ===================================================================
---- linux.orig/include/asm-i386/kgdb.h	2004-01-20 14:29:19.000000000 +0100
-+++ linux/include/asm-i386/kgdb.h	2004-01-20 14:29:19.000000000 +0100
+--- linux.orig/include/asm-i386/kgdb.h	2004-01-23 09:05:16.000000000 +0100
++++ linux/include/asm-i386/kgdb.h	2004-01-23 09:05:17.000000000 +0100
 @@ -0,0 +1,49 @@
 +#ifndef _ASM_KGDB_H_
 +#define _ASM_KGDB_H_
-- 
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:00    [from the cache]
©2003-2008