linux-mips
[Top] [All Lists]

Re: [PATCH] MIPS: microMIPS: Redefine value of BRK_BUG.

To: Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH] MIPS: microMIPS: Redefine value of BRK_BUG.
From: David Daney <ddaney.cavm@gmail.com>
Date: Thu, 17 Jan 2013 16:42:41 -0800
Cc: "Steven J. Hill" <sjhill@mips.com>, linux-mips@linux-mips.org
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=5tnTxl/f8DMTaIdTEfxAcpYDNP15eAHVj/zRF1JyPxc=; b=eQxfeUMdr8sh1iOLoFudgIgsVA4cyOOLjI8Mqc2eWlGr7rLOHMuE8qDFge2LDd4t2x A2UU1jxjVmGkMzRrJXPGyKsctdX/9rfQeDdEbrkG6Psy7olgdEmXPwuhTMzc3kyw5ipX ErsyJpd+uafj6GdTEldudeAv8u9izvk3PmCVQiOpnYF0Y0awf7TnT2YE+uYbmXkZgZZ+ Za5snX9jH44lmOG4KLwXO0WsRKiQfxoBC/yWrAsNKodY8e89LBkIbscMQ//RFEpL58cH LWsrXn1HpziLbngmi8UM1l6Adm9yFaEZyKfYiybzOdq7e7BUrayoFh0791A6D7EwfQ2j p1XA==
In-reply-to: <20130117225410.GB19406@linux-mips.org>
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
References: <1358444216-17213-1-git-send-email-sjhill@mips.com> <50F83FD5.2060908@gmail.com> <20130117225410.GB19406@linux-mips.org>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0
On 01/17/2013 02:54 PM, Ralf Baechle wrote:
On Thu, Jan 17, 2013 at 10:15:49AM -0800, David Daney wrote:

diff --git a/arch/mips/include/asm/break.h b/arch/mips/include/asm/break.h
index 9161e68..df9d090 100644
--- a/arch/mips/include/asm/break.h
+++ b/arch/mips/include/asm/break.h
@@ -27,6 +27,7 @@
  #define BRK_STACKOVERFLOW 9   /* For Ada stackchecking */
  #define BRK_NORLD     10      /* No rld found - not used by Linux/MIPS */
  #define _BRK_THREADBP 11      /* For threads, user bp (used by debuggers) */
+#define BRK_BUG_MM     12      /* Used by BUG() in microMIPS mode */
  #define BRK_BUG               512     /* Used by BUG() */

Can we move the CONFIG_CPU_MICROMIPS to here and just call the thing
BRK_BUG?

Or perhaps redefining it unconditionally.  I am not sure what the
implications of doing that would be.

That way...

The kernel decodes break and trap instruction in traps.c.  For a microMIPS-
enabled kernel it needs to be able to decode both classic and microMIPS
encoded instructions so we want separate symbols.

For any given kernel, BUG() will be implemented using exactly one trap value. That should be the value tested in traps.c

So we could make non-microMIPS use the same value as microMIPS and then we don't have to test for two values.

Side note: The values used only internally to the kernel should not be exported in a userspace visible header file.



Or we do something like

#define BRK_MM_BUG       12      /* Used by BUG() in microMIPS mode */
#define BRK_CM_BUG      512     /* Used by BUG() */

#ifdef __mips_micromips
#define BRK_BUG         BRK_MM_BUG
#else
#define BRK_BUG         BRK_CM_BUG
#endif

This makes the BRK_MM_* / BRK_CM_* macros available for decoding instructions
and the microMIPS-agnostic BRK_BUG for code such as BUG().

  #define BRK_KDB               513     /* Used in KDB_ENTER() */
  #define BRK_MEMU      514     /* Used by FPU emulator */
diff --git a/arch/mips/include/asm/bug.h b/arch/mips/include/asm/bug.h
index 540c98a..b716fb9 100644
--- a/arch/mips/include/asm/bug.h
+++ b/arch/mips/include/asm/bug.h
@@ -7,6 +7,10 @@
  #ifdef CONFIG_BUG

  #include <asm/break.h>
+#ifdef CONFIG_CPU_MICROMIPS
+#undef BRK_BUG
+#define BRK_BUG                BRK_BUG_MM
+#endif


...We don't need this bit.   Doing an #undef risks using different
values for BRK_BUG depending on whether or not asm/bug.h is
included.

And generally is not very elegant.

   Ralf




<Prev in Thread] Current Thread [Next in Thread>