git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
arch
/
mips
/
kernel
/
cpu-bugs64.c
diff --git
a/arch/mips/kernel/cpu-bugs64.c
b/arch/mips/kernel/cpu-bugs64.c
index
31c17ce
..
1375d44
100644
(file)
--- a/
arch/mips/kernel/cpu-bugs64.c
+++ b/
arch/mips/kernel/cpu-bugs64.c
@@
-177,7
+177,7
@@
static inline void check_daddi(void)
extern asmlinkage void handle_daddi_ov(void);
unsigned long flags;
void *handler;
extern asmlinkage void handle_daddi_ov(void);
unsigned long flags;
void *handler;
- long v;
+ long v
, tmp
;
printk("Checking for the daddi bug... ");
printk("Checking for the daddi bug... ");
@@
-197,13
+197,15
@@
static inline void check_daddi(void)
".set noat\n\t"
".set noreorder\n\t"
".set nomacro\n\t"
".set noat\n\t"
".set noreorder\n\t"
".set nomacro\n\t"
+ "addiu %1, $0, %2\n\t"
+ "dsrl %1, %1, 1\n\t"
#ifdef HAVE_AS_SET_DADDI
".set daddi\n\t"
#endif
#ifdef HAVE_AS_SET_DADDI
".set daddi\n\t"
#endif
- "daddi %0, %1, %
2
\n\t"
+ "daddi %0, %1, %
3
\n\t"
".set pop"
".set pop"
- : "=r" (v)
- : "
r" (0x7fffffffffffedcd
), "I" (0x1234));
+ : "=r" (v)
, "=&r" (tmp)
+ : "
I" (0xffffffffffffdb9a
), "I" (0x1234));
set_except_vector(12, handler);
local_irq_restore(flags);
set_except_vector(12, handler);
local_irq_restore(flags);
@@
-217,9
+219,11
@@
static inline void check_daddi(void)
local_irq_save(flags);
handler = set_except_vector(12, handle_daddi_ov);
asm volatile(
local_irq_save(flags);
handler = set_except_vector(12, handle_daddi_ov);
asm volatile(
- "daddi %0, %1, %2"
- : "=r" (v)
- : "r" (0x7fffffffffffedcd), "I" (0x1234));
+ "addiu %1, $0, %2\n\t"
+ "dsrl %1, %1, 1\n\t"
+ "daddi %0, %1, %3"
+ : "=r" (v), "=&r" (tmp)
+ : "I" (0xffffffffffffdb9a), "I" (0x1234));
set_except_vector(12, handler);
local_irq_restore(flags);
set_except_vector(12, handler);
local_irq_restore(flags);
@@
-240,7
+244,7
@@
static inline void check_daddi(void)
static inline void check_daddiu(void)
{
static inline void check_daddiu(void)
{
- long v, w;
+ long v, w
, tmp
;
printk("Checking for the daddiu bug... ");
printk("Checking for the daddiu bug... ");
@@
-265,15
+269,17
@@
static inline void check_daddiu(void)
".set noat\n\t"
".set noreorder\n\t"
".set nomacro\n\t"
".set noat\n\t"
".set noreorder\n\t"
".set nomacro\n\t"
+ "addiu %2, $0, %3\n\t"
+ "dsrl %2, %2, 1\n\t"
#ifdef HAVE_AS_SET_DADDI
".set daddi\n\t"
#endif
#ifdef HAVE_AS_SET_DADDI
".set daddi\n\t"
#endif
- "daddiu %0, %2, %
3
\n\t"
- "addiu %1, $0, %
3
\n\t"
+ "daddiu %0, %2, %
4
\n\t"
+ "addiu %1, $0, %
4
\n\t"
"daddu %1, %2\n\t"
".set pop"
"daddu %1, %2\n\t"
".set pop"
- : "=&r" (v), "=&r" (w)
- : "
r" (0x7fffffffffffedcd
), "I" (0x1234));
+ : "=&r" (v), "=&r" (w)
, "=&r" (tmp)
+ : "
I" (0xffffffffffffdb9a
), "I" (0x1234));
if (v == w) {
printk("no.\n");
if (v == w) {
printk("no.\n");
@@
-283,11
+289,13
@@
static inline void check_daddiu(void)
printk("yes, workaround... ");
asm volatile(
printk("yes, workaround... ");
asm volatile(
- "daddiu %0, %2, %3\n\t"
- "addiu %1, $0, %3\n\t"
+ "addiu %2, $0, %3\n\t"
+ "dsrl %2, %2, 1\n\t"
+ "daddiu %0, %2, %4\n\t"
+ "addiu %1, $0, %4\n\t"
"daddu %1, %2"
"daddu %1, %2"
- : "=&r" (v), "=&r" (w)
- : "
r" (0x7fffffffffffedcd
), "I" (0x1234));
+ : "=&r" (v), "=&r" (w)
, "=&r" (tmp)
+ : "
I" (0xffffffffffffdb9a
), "I" (0x1234));
if (v == w) {
printk("yes.\n");
if (v == w) {
printk("yes.\n");