lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sat, 16 Aug 2008 15:31:00 +0200
From:	Jiri Slaby <jirislaby@...il.com>
To:	Alexey Dobriyan <adobriyan@...il.com>
CC:	torvalds@...l.org, akpm@...l.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] De-macro spin_trylock_irq, spin_trylock_irqsave,	write_trylock_irqsave

On 08/16/2008 11:59 AM, Alexey Dobriyan wrote:
> 1) de-macro, remove ({ usages as side-effect,
> 2) change calling convention to not accept "flags" by value -- trylock
>    functions can modify them, so by-value is misleading, and number of users
>    is relatively low.
> 3) de-macro spin_trylock_irq() for a change.

Doesn't this break on sparc -- is it tested there? Shouldn't all that be 
__always_inline?

> --- a/include/linux/spinlock.h
> +++ b/include/linux/spinlock.h
> @@ -320,26 +320,38 @@ do {						\
>  
>  #define spin_trylock_bh(lock)	__cond_lock(lock, _spin_trylock_bh(lock))
>  
> -#define spin_trylock_irq(lock) \
> -({ \
> -	local_irq_disable(); \
> -	spin_trylock(lock) ? \
> -	1 : ({ local_irq_enable(); 0;  }); \
> -})
> -
> -#define spin_trylock_irqsave(lock, flags) \
> -({ \
> -	local_irq_save(flags); \
> -	spin_trylock(lock) ? \
> -	1 : ({ local_irq_restore(flags); 0; }); \
> -})
> -
> -#define write_trylock_irqsave(lock, flags) \
> -({ \
> -	local_irq_save(flags); \
> -	write_trylock(lock) ? \
> -	1 : ({ local_irq_restore(flags); 0; }); \
> -})
> +static inline int spin_trylock_irq(spinlock_t *lock)
> +{
> +	local_irq_disable();
> +	if (spin_trylock(lock))
> +		return 1;
> +	else {
> +		local_irq_enable();
> +		return 0;
> +	}
> +}
> +
> +static inline int spin_trylock_irqsave(spinlock_t *lock, unsigned long *flags)
> +{
> +	local_irq_save(*flags);
> +	if (spin_trylock(lock))
> +		return 1;
> +	else {
> +		local_irq_restore(*flags);
> +		return 0;
> +	}
> +}
> +
> +static inline int write_trylock_irqsave(rwlock_t *lock, unsigned long *flags)
> +{
> +	local_irq_save(*flags);
> +	if (write_trylock(lock))
> +		return 1;
> +	else {
> +		local_irq_restore(*flags);
> +		return 0;
> +	}
> +}
>  
>  /*
>   * Pull the atomic_t declaration:

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ