Michal Hocko
d47996082f
locking/rwsem: Introduce basis for down_write_killable()
...
Introduce a generic implementation necessary for down_write_killable().
This is a trivial extension of the already existing down_write() call
which can be interrupted by SIGKILL. This patch doesn't provide
down_write_killable() yet because arches have to provide the necessary
pieces before.
rwsem_down_write_failed() which is a generic slow path for the
write lock is extended to take a task state and renamed to
__rwsem_down_write_failed_common(). The return value is either a valid
semaphore pointer or ERR_PTR(-EINTR).
rwsem_down_write_failed_killable() is exported as a new way to wait for
the lock and be killable.
For rwsem-spinlock implementation the current __down_write() it updated
in a similar way as __rwsem_down_write_failed_common() except it doesn't
need new exports just visible __down_write_killable().
Architectures which are not using the generic rwsem implementation are
supposed to provide their __down_write_killable() implementation and
use rwsem_down_write_failed_killable() for the slow path.
Signed-off-by: Michal Hocko <mhocko@suse.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Chris Zankel <chris@zankel.net >
Cc: David S. Miller <davem@davemloft.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Max Filippov <jcmvbkbc@gmail.com >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Signed-off-by: Davidlohr Bueso <dbueso@suse.de >
Cc: Signed-off-by: Jason Low <jason.low2@hp.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Tony Luck <tony.luck@intel.com >
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Cc: sparclinux@vger.kernel.org
Link: http://lkml.kernel.org/r/1460041951-22347-7-git-send-email-mhocko@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2016-04-13 10:42:20 +02:00
Michal Hocko
f8e04d8545
locking/rwsem: Get rid of __down_write_nested()
...
This is no longer used anywhere and all callers (__down_write()) use
0 as a subclass. Ditch __down_write_nested() to make the code easier
to follow.
This shouldn't introduce any functional change.
Signed-off-by: Michal Hocko <mhocko@suse.com >
Acked-by: Davidlohr Bueso <dave@stgolabs.net >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Chris Zankel <chris@zankel.net >
Cc: David S. Miller <davem@davemloft.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Max Filippov <jcmvbkbc@gmail.com >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Signed-off-by: Davidlohr Bueso <dbueso@suse.de >
Cc: Signed-off-by: Jason Low <jason.low2@hp.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Tony Luck <tony.luck@intel.com >
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Cc: sparclinux@vger.kernel.org
Link: http://lkml.kernel.org/r/1460041951-22347-2-git-send-email-mhocko@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2016-04-13 10:42:16 +02:00
Davidlohr Bueso
49e4b2bcf7
locking/rwsem: Document barrier need when waking tasks
...
The need for the smp_mb() in __rwsem_do_wake() should be
properly documented. Applies to both xadd and spinlock
variants.
Signed-off-by: Davidlohr Bueso <dbueso@suse.de >
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: Jason Low <jason.low2@hp.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michel Lespinasse <walken@google.com >
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Tim Chen <tim.c.chen@linux.intel.com >
Link: http://lkml.kernel.org/r/1422609267-15102-3-git-send-email-dave@stgolabs.net
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2015-02-18 16:57:10 +01:00
Davidlohr Bueso
73105994c5
locking/rwsem: Use task->state helpers
...
Call __set_task_state() instead of assigning the new state
directly. These interfaces also aid CONFIG_DEBUG_ATOMIC_SLEEP
environments, keeping track of who last changed the state.
Signed-off-by: Davidlohr Bueso <dbueso@suse.de >
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com >
Cc: Jason Low <jason.low2@hp.com >
Cc: Michel Lespinasse <walken@google.com >
Cc: Tim Chen <tim.c.chen@linux.intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Link: http://lkml.kernel.org/r/1422257769-14083-2-git-send-email-dave@stgolabs.net
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2015-02-04 07:57:39 +01:00
Peter Zijlstra
13b9a962a2
locking/rwsem: Rename 'activity' to 'count'
...
There are two definitions of struct rw_semaphore, one in linux/rwsem.h
and one in linux/rwsem-spinlock.h.
For some reason they have different names for the initial field. This
makes it impossible to use C99 named initialization for
__RWSEM_INITIALIZER() -- or we have to duplicate that entire thing
along with the structure definitions.
The simpler patch is renaming the rwsem-spinlock variant to match the
regular rwsem.
This allows us to switch to C99 named initialization.
Signed-off-by: Peter Zijlstra <peterz@infradead.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Link: http://lkml.kernel.org/n/tip-bmrZolsbGmautmzrerog27io@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2014-07-16 14:56:55 +02:00
Peter Zijlstra
ed428bfc3c
locking: Move the rwsem code to kernel/locking/
...
Notably: changed lib/rwsem* targets from lib- to obj-, no idea about
the ramifications of that.
Suggested-by: Ingo Molnar <mingo@kernel.org >
Signed-off-by: Peter Zijlstra <peterz@infradead.org >
Link: http://lkml.kernel.org/n/tip-g0kynfh5feriwc6p3h6kpbw6@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2013-11-06 09:24:18 +01:00