diff mbox

[08/11] ia64, rwsem: provide __down_write_killable

Message ID 1460041951-22347-9-git-send-email-mhocko@kernel.org (mailing list archive)
State New, archived
Headers show

Commit Message

Michal Hocko April 7, 2016, 3:12 p.m. UTC
From: Michal Hocko <mhocko@suse.com>

Introduce ___down_write for the fast path and reuse it for __down_write
resp. __down_write_killable each using the respective generic slow path
(rwsem_down_write_failed resp. rwsem_down_write_failed_killable).

Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 arch/ia64/include/asm/rwsem.h | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

Comments

Sergei Shtylyov April 7, 2016, 5:28 p.m. UTC | #1
Hello.

On 04/07/2016 06:12 PM, Michal Hocko wrote:

> From: Michal Hocko <mhocko@suse.com>
>
> Introduce ___down_write for the fast path and reuse it for __down_write
> resp. __down_write_killable each using the respective generic slow path
> (rwsem_down_write_failed resp. rwsem_down_write_failed_killable).
>
> Signed-off-by: Michal Hocko <mhocko@suse.com>
> ---
>   arch/ia64/include/asm/rwsem.h | 22 +++++++++++++++++++---
>   1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/arch/ia64/include/asm/rwsem.h b/arch/ia64/include/asm/rwsem.h
> index 3027e7516d85..5e78cb40d9df 100644
> --- a/arch/ia64/include/asm/rwsem.h
> +++ b/arch/ia64/include/asm/rwsem.h
> @@ -49,8 +49,8 @@ __down_read (struct rw_semaphore *sem)
>   /*
>    * lock for writing
>    */
> -static inline void
> -__down_write (struct rw_semaphore *sem)
> +static inline long
> +___down_write (struct rw_semaphore *sem)
>   {
>   	long old, new;
>
> @@ -59,10 +59,26 @@ __down_write (struct rw_semaphore *sem)
>   		new = old + RWSEM_ACTIVE_WRITE_BIAS;
>   	} while (cmpxchg_acq(&sem->count, old, new) != old);
>
> -	if (old != 0)
> +	return old;
> +}
> +
> +static inline void
> +__down_write (struct rw_semaphore *sem)
> +{
> +	if (___down_write(sem))
>   		rwsem_down_write_failed(sem);
>   }
>
> +static inline int
> +__down_write_killable (struct rw_semaphore *sem)

    Looks like you haven't run this patch thru scripts/checkpatch.pl. Hint: 
space before ( isn't allowed.

[...]

MNBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Hocko April 8, 2016, 6:22 a.m. UTC | #2
On Thu 07-04-16 20:28:16, Sergei Shtylyov wrote:
> Hello.
> 
> On 04/07/2016 06:12 PM, Michal Hocko wrote:
> 
> >From: Michal Hocko <mhocko@suse.com>
> >
> >Introduce ___down_write for the fast path and reuse it for __down_write
> >resp. __down_write_killable each using the respective generic slow path
> >(rwsem_down_write_failed resp. rwsem_down_write_failed_killable).
> >
> >Signed-off-by: Michal Hocko <mhocko@suse.com>
> >---
> >  arch/ia64/include/asm/rwsem.h | 22 +++++++++++++++++++---
> >  1 file changed, 19 insertions(+), 3 deletions(-)
> >
> >diff --git a/arch/ia64/include/asm/rwsem.h b/arch/ia64/include/asm/rwsem.h
> >index 3027e7516d85..5e78cb40d9df 100644
> >--- a/arch/ia64/include/asm/rwsem.h
> >+++ b/arch/ia64/include/asm/rwsem.h
> >@@ -49,8 +49,8 @@ __down_read (struct rw_semaphore *sem)
> >  /*
> >   * lock for writing
> >   */
> >-static inline void
> >-__down_write (struct rw_semaphore *sem)
> >+static inline long
> >+___down_write (struct rw_semaphore *sem)
> >  {
> >  	long old, new;
> >
> >@@ -59,10 +59,26 @@ __down_write (struct rw_semaphore *sem)
> >  		new = old + RWSEM_ACTIVE_WRITE_BIAS;
> >  	} while (cmpxchg_acq(&sem->count, old, new) != old);
> >
> >-	if (old != 0)
> >+	return old;
> >+}
> >+
> >+static inline void
> >+__down_write (struct rw_semaphore *sem)
> >+{
> >+	if (___down_write(sem))
> >  		rwsem_down_write_failed(sem);
> >  }
> >
> >+static inline int
> >+__down_write_killable (struct rw_semaphore *sem)
> 
>    Looks like you haven't run this patch thru scripts/checkpatch.pl. Hint:
> space before ( isn't allowed.

I have just kept the original code styling because I didn't feel like
changing the whole file.
diff mbox

Patch

diff --git a/arch/ia64/include/asm/rwsem.h b/arch/ia64/include/asm/rwsem.h
index 3027e7516d85..5e78cb40d9df 100644
--- a/arch/ia64/include/asm/rwsem.h
+++ b/arch/ia64/include/asm/rwsem.h
@@ -49,8 +49,8 @@  __down_read (struct rw_semaphore *sem)
 /*
  * lock for writing
  */
-static inline void
-__down_write (struct rw_semaphore *sem)
+static inline long
+___down_write (struct rw_semaphore *sem)
 {
 	long old, new;
 
@@ -59,10 +59,26 @@  __down_write (struct rw_semaphore *sem)
 		new = old + RWSEM_ACTIVE_WRITE_BIAS;
 	} while (cmpxchg_acq(&sem->count, old, new) != old);
 
-	if (old != 0)
+	return old;
+}
+
+static inline void
+__down_write (struct rw_semaphore *sem)
+{
+	if (___down_write(sem))
 		rwsem_down_write_failed(sem);
 }
 
+static inline int
+__down_write_killable (struct rw_semaphore *sem)
+{
+	if (___down_write(sem))
+		if (IS_ERR(rwsem_down_write_failed_killable(sem)))
+			return -EINTR;
+
+	return 0;
+}
+
 /*
  * unlock after reading
  */