Linux MIPS Architecture development
 help / color / mirror / Atom feed
* [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
@ 2007-06-04 15:02 Atsushi Nemoto
  2007-06-04 15:10 ` Ralf Baechle
  0 siblings, 1 reply; 7+ messages in thread
From: Atsushi Nemoto @ 2007-06-04 15:02 UTC (permalink / raw)
  To: linux-mips; +Cc: ralf

Unify lib-{32,64}/watch.S into lib/watch.S and remove lib-{32,64}
completely.

The old 64-bit __watch_set() expected an physical address and the old
32-bit __watch_set() expected a KSEG0 virtual address.  The new
unified __watch_set() is based on the 64-bit one.  Since there is no
real user of the __watch_set(), this incompatibility would not cause
any problem.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
---
This patch can be applied after "[PATCH] Unify dump_tlb".

 arch/mips/Makefile                |    2 -
 arch/mips/lib-32/Makefile         |    5 ---
 arch/mips/lib-32/watch.S          |   60 -------------------------------------
 arch/mips/lib-64/Makefile         |    5 ---
 arch/mips/lib/Makefile            |    2 +-
 arch/mips/{lib-64 => lib}/watch.S |   16 +++++-----
 6 files changed, 9 insertions(+), 81 deletions(-)

diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 2b19605..fdade85 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -633,8 +633,6 @@ CPPFLAGS_vmlinux.lds := \
 head-y := arch/mips/kernel/head.o arch/mips/kernel/init_task.o
 
 libs-y			+= arch/mips/lib/
-libs-$(CONFIG_32BIT)	+= arch/mips/lib-32/
-libs-$(CONFIG_64BIT)	+= arch/mips/lib-64/
 
 core-y			+= arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/
 
diff --git a/arch/mips/lib-32/Makefile b/arch/mips/lib-32/Makefile
deleted file mode 100644
index 7bae849..0000000
--- a/arch/mips/lib-32/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Makefile for MIPS-specific library files..
-#
-
-lib-y	+= watch.o
diff --git a/arch/mips/lib-32/watch.S b/arch/mips/lib-32/watch.S
deleted file mode 100644
index 808b3af..0000000
--- a/arch/mips/lib-32/watch.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Kernel debug stuff to use the Watch registers.
- * Useful to find stack overflows, dangling pointers etc.
- *
- * Copyright (C) 1995, 1996, 1999 by Ralf Baechle
- */
-#include <asm/asm.h>
-#include <asm/mipsregs.h>
-#include <asm/regdef.h>
-
-		.set	noreorder
-/*
- * Parameter: a0 - logic address to watch
- *                 Currently only KSEG0 addresses are allowed!
- *            a1 - set bit #1 to trap on load references
- *                     bit #0 to trap on store references
- * Results  : none
- */
-		LEAF(__watch_set)
-		li	t0, 0x80000000
-		subu	a0, t0
-		ori	a0, 7
-		xori	a0, 7
-		or	a0, a1
-		mtc0	a0, CP0_WATCHLO
-		sw	a0, watch_savelo
-
-		jr	ra
-		 mtc0	zero, CP0_WATCHHI
-		END(__watch_set)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_clear)
-		jr	ra
-		 mtc0	zero, CP0_WATCHLO
-		END(__watch_clear)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_reenable)
-		lw	t0, watch_savelo
-		jr	ra
-		 mtc0	t0, CP0_WATCHLO
-		END(__watch_reenable)
-
-/*
- * Saved value of the c0_watchlo register for watch_reenable()
- */
-		.data
-watch_savelo:	.word	0
-		.text
diff --git a/arch/mips/lib-64/Makefile b/arch/mips/lib-64/Makefile
deleted file mode 100644
index 7bae849..0000000
--- a/arch/mips/lib-64/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Makefile for MIPS-specific library files..
-#
-
-lib-y	+= watch.o
diff --git a/arch/mips/lib-64/watch.S b/arch/mips/lib-64/watch.S
deleted file mode 100644
index f914340..0000000
--- a/arch/mips/lib-64/watch.S
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Kernel debug stuff to use the Watch registers.
- * Useful to find stack overflows, dangling pointers etc.
- *
- * Copyright (C) 1995, 1996, 1999, 2001 by Ralf Baechle
- */
-#include <asm/asm.h>
-#include <asm/mipsregs.h>
-#include <asm/regdef.h>
-
-		.set	noreorder
-/*
- * Parameter: a0 - physical address to watch
- *            a1 - set bit #1 to trap on load references
- *                     bit #0 to trap on store references
- * Results  : none
- */
-		LEAF(__watch_set)
-		ori	a0, 7
-		xori	a0, 7
-		or	a0, a1
-		mtc0	a0, CP0_WATCHLO
-		sd	a0, watch_savelo
-		dsrl32	a0, a0, 0
-
-		jr	ra
-		 mtc0	zero, CP0_WATCHHI
-		END(__watch_set)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_clear)
-		jr	ra
-		 mtc0	zero, CP0_WATCHLO
-		END(__watch_clear)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_reenable)
-		ld	t0, watch_savelo
-		jr	ra
-		 mtc0	t0, CP0_WATCHLO
-		END(__watch_reenable)
-
-/*
- * Saved value of the c0_watchlo register for watch_reenable()
- */
-		.local	watch_savelo
-		.comm	watch_savelo, 8, 8
diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
index b27a326..ccf0f2e 100644
--- a/arch/mips/lib/Makefile
+++ b/arch/mips/lib/Makefile
@@ -3,7 +3,7 @@
 #
 
 lib-y	+= csum_partial.o memcpy.o memcpy-inatomic.o memset.o strlen_user.o \
-	   strncpy_user.o strnlen_user.o uncached.o
+	   strncpy_user.o strnlen_user.o uncached.o watch.o
 
 obj-y			+= iomap.o
 obj-$(CONFIG_PCI)	+= iomap-pci.o
diff --git a/arch/mips/lib/watch.S b/arch/mips/lib/watch.S
new file mode 100644
index 0000000..591a73f
--- /dev/null
+++ b/arch/mips/lib/watch.S
@@ -0,0 +1,57 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Kernel debug stuff to use the Watch registers.
+ * Useful to find stack overflows, dangling pointers etc.
+ *
+ * Copyright (C) 1995, 1996, 1999, 2001 by Ralf Baechle
+ */
+#include <asm/asm.h>
+#include <asm/mipsregs.h>
+#include <asm/regdef.h>
+
+		.set	noreorder
+/*
+ * Parameter: a0 - physical address to watch
+ *            a1 - set bit #1 to trap on load references
+ *                     bit #0 to trap on store references
+ * Results  : none
+ */
+		LEAF(__watch_set)
+		ori	a0, 7
+		xori	a0, 7
+		or	a0, a1
+		MTC0	a0, CP0_WATCHLO
+		LONG_S	a0, watch_savelo
+
+		jr	ra
+		 mtc0	zero, CP0_WATCHHI
+		END(__watch_set)
+
+/*
+ * Parameter: none
+ * Results  : none
+ */
+		LEAF(__watch_clear)
+		jr	ra
+		 MTC0	zero, CP0_WATCHLO
+		END(__watch_clear)
+
+/*
+ * Parameter: none
+ * Results  : none
+ */
+		LEAF(__watch_reenable)
+		LONG_L	t0, watch_savelo
+		jr	ra
+		 MTC0	t0, CP0_WATCHLO
+		END(__watch_reenable)
+
+/*
+ * Saved value of the c0_watchlo register for watch_reenable()
+ */
+		.data
+watch_savelo:	LONG	0
+		.text

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 15:02 [PATCH] Unify watch.S and remove arch/mips/lib-{32,64} Atsushi Nemoto
@ 2007-06-04 15:10 ` Ralf Baechle
  2007-06-04 15:15   ` Sergei Shtylyov
                     ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Ralf Baechle @ 2007-06-04 15:10 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips

On Tue, Jun 05, 2007 at 12:02:39AM +0900, Atsushi Nemoto wrote:

> Unify lib-{32,64}/watch.S into lib/watch.S and remove lib-{32,64}
> completely.
> 
> The old 64-bit __watch_set() expected an physical address and the old
> 32-bit __watch_set() expected a KSEG0 virtual address.  The new
> unified __watch_set() is based on the 64-bit one.  Since there is no
> real user of the __watch_set(), this incompatibility would not cause
> any problem.

I think we can simply drop the entire watchpoint support.  This was
only ever working on R4000/R4400 and even there only somewhat useful
for kernel debugging.  So if we ever use watchpoint support I think
something needs to be developed from scratch.

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 15:10 ` Ralf Baechle
@ 2007-06-04 15:15   ` Sergei Shtylyov
  2007-06-04 15:23   ` Maciej W. Rozycki
  2007-06-04 16:28   ` Atsushi Nemoto
  2 siblings, 0 replies; 7+ messages in thread
From: Sergei Shtylyov @ 2007-06-04 15:15 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Atsushi Nemoto, linux-mips

Hello.

Ralf Baechle wrote:

>>Unify lib-{32,64}/watch.S into lib/watch.S and remove lib-{32,64}
>>completely.

>>The old 64-bit __watch_set() expected an physical address and the old
>>32-bit __watch_set() expected a KSEG0 virtual address.  The new
>>unified __watch_set() is based on the 64-bit one.  Since there is no
>>real user of the __watch_set(), this incompatibility would not cause
>>any problem.

> I think we can simply drop the entire watchpoint support.  This was
> only ever working on R4000/R4400 and even there only somewhat useful
> for kernel debugging.  So if we ever use watchpoint support I think
> something needs to be developed from scratch.

    Watchpoints *could* be supported as part of KGDB, BTW.

>   Ralf

WBR, Sergei

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 15:10 ` Ralf Baechle
  2007-06-04 15:15   ` Sergei Shtylyov
@ 2007-06-04 15:23   ` Maciej W. Rozycki
  2007-06-04 15:41     ` Ralf Baechle
  2007-06-04 16:28   ` Atsushi Nemoto
  2 siblings, 1 reply; 7+ messages in thread
From: Maciej W. Rozycki @ 2007-06-04 15:23 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Atsushi Nemoto, linux-mips

On Mon, 4 Jun 2007, Ralf Baechle wrote:

> I think we can simply drop the entire watchpoint support.  This was
> only ever working on R4000/R4400 and even there only somewhat useful
> for kernel debugging.  So if we ever use watchpoint support I think
> something needs to be developed from scratch.

 A long-term plan is to make them available to userland through ptrace() 
in a uniform way covering MIPS32/64 watchpoints as well for gdb and 
suchlike.

  Maciej

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 15:23   ` Maciej W. Rozycki
@ 2007-06-04 15:41     ` Ralf Baechle
  0 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2007-06-04 15:41 UTC (permalink / raw)
  To: Maciej W. Rozycki; +Cc: Atsushi Nemoto, linux-mips

On Mon, Jun 04, 2007 at 04:23:29PM +0100, Maciej W. Rozycki wrote:

> > I think we can simply drop the entire watchpoint support.  This was
> > only ever working on R4000/R4400 and even there only somewhat useful
> > for kernel debugging.  So if we ever use watchpoint support I think
> > something needs to be developed from scratch.
> 
>  A long-term plan is to make them available to userland through ptrace() 
> in a uniform way covering MIPS32/64 watchpoints as well for gdb and 
> suchlike.

Sure, one of infinitly many things on the to do list.  However the code
we currently havee isn't very useful for that purpose.  For maintenance
sake it should rather be rewritten in C and it needs to learn about
processors of the post R4400 era.

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 15:10 ` Ralf Baechle
  2007-06-04 15:15   ` Sergei Shtylyov
  2007-06-04 15:23   ` Maciej W. Rozycki
@ 2007-06-04 16:28   ` Atsushi Nemoto
  2007-06-07 17:39     ` Ralf Baechle
  2 siblings, 1 reply; 7+ messages in thread
From: Atsushi Nemoto @ 2007-06-04 16:28 UTC (permalink / raw)
  To: ralf; +Cc: linux-mips

On Mon, 4 Jun 2007 16:10:48 +0100, Ralf Baechle <ralf@linux-mips.org> wrote:
> I think we can simply drop the entire watchpoint support.  This was
> only ever working on R4000/R4400 and even there only somewhat useful
> for kernel debugging.  So if we ever use watchpoint support I think
> something needs to be developed from scratch.

OK, then this is an alternative patch to drop them.


Subject: [PATCH] Remove unused watchpoint support and arch/mips/lib-{32,64}

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
---
This patch can be applied after "[PATCH] Unify dump_tlb".

 arch/mips/Makefile        |    2 -
 arch/mips/kernel/proc.c   |    1 -
 arch/mips/kernel/traps.c  |    1 -
 arch/mips/lib-32/Makefile |    5 ---
 arch/mips/lib-32/watch.S  |   60 ---------------------------------------------
 arch/mips/lib-64/Makefile |    5 ---
 arch/mips/lib-64/watch.S  |   57 ------------------------------------------
 include/asm-mips/watch.h  |   35 --------------------------
 8 files changed, 0 insertions(+), 166 deletions(-)

diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 2b19605..fdade85 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -633,8 +633,6 @@ CPPFLAGS_vmlinux.lds := \
 head-y := arch/mips/kernel/head.o arch/mips/kernel/init_task.o
 
 libs-y			+= arch/mips/lib/
-libs-$(CONFIG_32BIT)	+= arch/mips/lib-32/
-libs-$(CONFIG_64BIT)	+= arch/mips/lib-64/
 
 core-y			+= arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/
 
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
index 5ddc2e9..eb7730d 100644
--- a/arch/mips/kernel/proc.c
+++ b/arch/mips/kernel/proc.c
@@ -14,7 +14,6 @@
 #include <asm/cpu-features.h>
 #include <asm/mipsregs.h>
 #include <asm/processor.h>
-#include <asm/watch.h>
 
 unsigned int vced_count, vcei_count;
 
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index a7a17eb..5de0734 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -39,7 +39,6 @@
 #include <asm/traps.h>
 #include <asm/uaccess.h>
 #include <asm/mmu_context.h>
-#include <asm/watch.h>
 #include <asm/types.h>
 #include <asm/stacktrace.h>
 
diff --git a/arch/mips/lib-32/Makefile b/arch/mips/lib-32/Makefile
deleted file mode 100644
index 7bae849..0000000
--- a/arch/mips/lib-32/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Makefile for MIPS-specific library files..
-#
-
-lib-y	+= watch.o
diff --git a/arch/mips/lib-32/watch.S b/arch/mips/lib-32/watch.S
deleted file mode 100644
index 808b3af..0000000
--- a/arch/mips/lib-32/watch.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Kernel debug stuff to use the Watch registers.
- * Useful to find stack overflows, dangling pointers etc.
- *
- * Copyright (C) 1995, 1996, 1999 by Ralf Baechle
- */
-#include <asm/asm.h>
-#include <asm/mipsregs.h>
-#include <asm/regdef.h>
-
-		.set	noreorder
-/*
- * Parameter: a0 - logic address to watch
- *                 Currently only KSEG0 addresses are allowed!
- *            a1 - set bit #1 to trap on load references
- *                     bit #0 to trap on store references
- * Results  : none
- */
-		LEAF(__watch_set)
-		li	t0, 0x80000000
-		subu	a0, t0
-		ori	a0, 7
-		xori	a0, 7
-		or	a0, a1
-		mtc0	a0, CP0_WATCHLO
-		sw	a0, watch_savelo
-
-		jr	ra
-		 mtc0	zero, CP0_WATCHHI
-		END(__watch_set)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_clear)
-		jr	ra
-		 mtc0	zero, CP0_WATCHLO
-		END(__watch_clear)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_reenable)
-		lw	t0, watch_savelo
-		jr	ra
-		 mtc0	t0, CP0_WATCHLO
-		END(__watch_reenable)
-
-/*
- * Saved value of the c0_watchlo register for watch_reenable()
- */
-		.data
-watch_savelo:	.word	0
-		.text
diff --git a/arch/mips/lib-64/Makefile b/arch/mips/lib-64/Makefile
deleted file mode 100644
index 7bae849..0000000
--- a/arch/mips/lib-64/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Makefile for MIPS-specific library files..
-#
-
-lib-y	+= watch.o
diff --git a/arch/mips/lib-64/watch.S b/arch/mips/lib-64/watch.S
deleted file mode 100644
index f914340..0000000
--- a/arch/mips/lib-64/watch.S
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Kernel debug stuff to use the Watch registers.
- * Useful to find stack overflows, dangling pointers etc.
- *
- * Copyright (C) 1995, 1996, 1999, 2001 by Ralf Baechle
- */
-#include <asm/asm.h>
-#include <asm/mipsregs.h>
-#include <asm/regdef.h>
-
-		.set	noreorder
-/*
- * Parameter: a0 - physical address to watch
- *            a1 - set bit #1 to trap on load references
- *                     bit #0 to trap on store references
- * Results  : none
- */
-		LEAF(__watch_set)
-		ori	a0, 7
-		xori	a0, 7
-		or	a0, a1
-		mtc0	a0, CP0_WATCHLO
-		sd	a0, watch_savelo
-		dsrl32	a0, a0, 0
-
-		jr	ra
-		 mtc0	zero, CP0_WATCHHI
-		END(__watch_set)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_clear)
-		jr	ra
-		 mtc0	zero, CP0_WATCHLO
-		END(__watch_clear)
-
-/*
- * Parameter: none
- * Results  : none
- */
-		LEAF(__watch_reenable)
-		ld	t0, watch_savelo
-		jr	ra
-		 mtc0	t0, CP0_WATCHLO
-		END(__watch_reenable)
-
-/*
- * Saved value of the c0_watchlo register for watch_reenable()
- */
-		.local	watch_savelo
-		.comm	watch_savelo, 8, 8
diff --git a/include/asm-mips/watch.h b/include/asm-mips/watch.h
deleted file mode 100644
index 6aa90ca..0000000
--- a/include/asm-mips/watch.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1996, 1997, 1998, 2000, 2001 by Ralf Baechle
- */
-#ifndef _ASM_WATCH_H
-#define _ASM_WATCH_H
-
-#include <linux/linkage.h>
-
-/*
- * Types of reference for watch_set()
- */
-enum wref_type {
-	wr_save = 1,
-	wr_load = 2
-};
-
-extern asmlinkage void __watch_set(unsigned long addr, enum wref_type ref);
-extern asmlinkage void __watch_clear(void);
-extern asmlinkage void __watch_reenable(void);
-
-#define watch_set(addr, ref)					\
-	if (cpu_has_watch)					\
-		__watch_set(addr, ref)
-#define watch_clear()						\
-	if (cpu_has_watch)					\
-		__watch_clear()
-#define watch_reenable()					\
-	if (cpu_has_watch)					\
-		__watch_reenable()
-
-#endif /* _ASM_WATCH_H */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Unify watch.S and remove arch/mips/lib-{32,64}
  2007-06-04 16:28   ` Atsushi Nemoto
@ 2007-06-07 17:39     ` Ralf Baechle
  0 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2007-06-07 17:39 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips

On Tue, Jun 05, 2007 at 01:28:07AM +0900, Atsushi Nemoto wrote:

> OK, then this is an alternative patch to drop them.

Wonderful, so arch/mips/lib-{32,64} is history now.

Thanks!

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-06-07 17:44 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-04 15:02 [PATCH] Unify watch.S and remove arch/mips/lib-{32,64} Atsushi Nemoto
2007-06-04 15:10 ` Ralf Baechle
2007-06-04 15:15   ` Sergei Shtylyov
2007-06-04 15:23   ` Maciej W. Rozycki
2007-06-04 15:41     ` Ralf Baechle
2007-06-04 16:28   ` Atsushi Nemoto
2007-06-07 17:39     ` Ralf Baechle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox