2005-04-26 20:05:12

by Mikael Pettersson

[permalink] [raw]
Subject: [PATCH 2.4.31-pre1] rwsem-spinlock linkage error

The

Andrew Morton:
o rwsem: Make rwsems use interrupt disabling spinlocks

change in 2.4.31-pre1 has a typo: one occurrence of spin_unlock() was
changed to spin_unlock_restore() instead of spin_unlock_irqrestore()
as was obviously the intention. Since spin_unlock_restore() doesn't
exist, this results in linkage errors on x86_64 and other archs using
CONFIG_RWSEM_GENERIC_SPINLOCK.

Trival fix below.

Signed-off-by: Mikael Pettersson <[email protected]>

--- linux-2.4.31-pre1/lib/rwsem-spinlock.c.~1~ 2005-04-26 19:12:52.000000000 +0200
+++ linux-2.4.31-pre1/lib/rwsem-spinlock.c 2005-04-26 21:16:05.000000000 +0200
@@ -269,7 +269,7 @@ void fastcall __up_read(struct rw_semaph
if (--sem->activity==0 && !list_empty(&sem->wait_list))
sem = __rwsem_wake_one_writer(sem);

- spin_unlock_restore(&sem->wait_lock, flags);
+ spin_unlock_irqrestore(&sem->wait_lock, flags);

rwsemtrace(sem,"Leaving __up_read");
}


2005-04-27 20:49:00

by Marcelo Tosatti

[permalink] [raw]
Subject: Re: [PATCH 2.4.31-pre1] rwsem-spinlock linkage error


Applied, thanks Mikael.

On Tue, Apr 26, 2005 at 10:04:10PM +0200, Mikael Pettersson wrote:
> The
>
> Andrew Morton:
> o rwsem: Make rwsems use interrupt disabling spinlocks
>
> change in 2.4.31-pre1 has a typo: one occurrence of spin_unlock() was
> changed to spin_unlock_restore() instead of spin_unlock_irqrestore()
> as was obviously the intention. Since spin_unlock_restore() doesn't
> exist, this results in linkage errors on x86_64 and other archs using
> CONFIG_RWSEM_GENERIC_SPINLOCK.
>
> Trival fix below.
>
> Signed-off-by: Mikael Pettersson <[email protected]>
>
> --- linux-2.4.31-pre1/lib/rwsem-spinlock.c.~1~ 2005-04-26 19:12:52.000000000 +0200
> +++ linux-2.4.31-pre1/lib/rwsem-spinlock.c 2005-04-26 21:16:05.000000000 +0200
> @@ -269,7 +269,7 @@ void fastcall __up_read(struct rw_semaph
> if (--sem->activity==0 && !list_empty(&sem->wait_list))
> sem = __rwsem_wake_one_writer(sem);
>
> - spin_unlock_restore(&sem->wait_lock, flags);
> + spin_unlock_irqrestore(&sem->wait_lock, flags);
>
> rwsemtrace(sem,"Leaving __up_read");
> }