Re: can't find a register in class 'R1_REGS' while reloading 'asm'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 07 Dec 2009, John David Anglin wrote:

> > is anybody able to reproduce it? configuration is attached.

With your config, I get the same error.

I have attached a potential work around.  The basic idea is to force
'a' to a specific register to avoid the spill problem in reload.
It may be a bit risky to use 'r20' but there don't appear to be
any real calls in __raw_spin_is_locked.

Dave
-- 
J. David Anglin                                  dave.anglin@xxxxxxxxxxxxxx
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
diff --git a/arch/parisc/include/asm/spinlock.h b/arch/parisc/include/asm/spinlock.h
index fae03e1..ce87e4b 100644
--- a/arch/parisc/include/asm/spinlock.h
+++ b/arch/parisc/include/asm/spinlock.h
@@ -18,10 +18,9 @@ static inline int __raw_spin_is_locked(raw_spinlock_t *x)
 static inline void __raw_spin_lock_flags(raw_spinlock_t *x,
 					 unsigned long flags)
 {
-	volatile unsigned int *a;
+	volatile register unsigned int *a asm ("r20") = __ldcw_align(x);
 
 	mb();
-	a = __ldcw_align(x);
 	while (__ldcw(a) == 0)
 		while (*a == 0)
 			if (flags & PSW_SM_I) {

[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux