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
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
arch
/
sparc64
/
prom
/
p1275.c
diff --git
a/arch/sparc64/prom/p1275.c
b/arch/sparc64/prom/p1275.c
index
2b32c48
..
a5a7c57
100644
(file)
--- a/
arch/sparc64/prom/p1275.c
+++ b/
arch/sparc64/prom/p1275.c
@@
-30,6
+30,16
@@
extern void prom_world(int);
extern void prom_cif_interface(void);
extern void prom_cif_callback(void);
extern void prom_cif_interface(void);
extern void prom_cif_callback(void);
+static inline unsigned long spitfire_get_primary_context(void)
+{
+ unsigned long ctx;
+
+ __asm__ __volatile__("ldxa [%1] %2, %0"
+ : "=r" (ctx)
+ : "r" (PRIMARY_CONTEXT), "i" (ASI_DMMU));
+ return ctx;
+}
+
/*
* This provides SMP safety on the p1275buf. prom_callback() drops this lock
* to allow recursuve acquisition.
/*
* This provides SMP safety on the p1275buf. prom_callback() drops this lock
* to allow recursuve acquisition.
@@
-45,6
+55,7
@@
long p1275_cmd(const char *service, long fmt, ...)
long attrs, x;
p = p1275buf.prom_buffer;
long attrs, x;
p = p1275buf.prom_buffer;
+ BUG_ON((spitfire_get_primary_context() & CTX_NR_MASK) != 0);
spin_lock_irqsave(&prom_entry_lock, flags);
spin_lock_irqsave(&prom_entry_lock, flags);