Displaying 18 results from an estimated 18 matches for "clear_slowpath".
2015 Apr 30
0
[PATCH 3/6] x86: introduce new pvops function clear_slowpath
To speed up paravirtualized spinlock handling when running on bare
metal introduce a new pvops function "clear_slowpath". This is a nop
when the kernel is running on bare metal.
As the clear_slowpath function is common for all users add a new
initialization function to set the pvops function pointer in order
to avoid spreading the knowledge which function to use.
Signed-off-by: Juergen Gross <jgross at sus...
2015 Apr 30
12
[PATCH 0/6] x86: reduce paravirtualized spinlock overhead
...sting on bare metal and as Xen dom0.
Correct patching verified by disassembly of active kernel.
Juergen Gross (6):
x86: use macro instead of "0" for setting TICKET_SLOWPATH_FLAG
x86: move decision about clearing slowpath flag into arch_spin_lock()
x86: introduce new pvops function clear_slowpath
x86: introduce new pvops function spin_unlock
x86: switch config from UNINLINE_SPIN_UNLOCK to INLINE_SPIN_UNLOCK
x86: remove no longer needed paravirt_ticketlocks_enabled
arch/x86/Kconfig | 1 -
arch/x86/include/asm/paravirt.h | 13 +++++++++
arch/x86/include/asm...
2015 Apr 30
12
[PATCH 0/6] x86: reduce paravirtualized spinlock overhead
...sting on bare metal and as Xen dom0.
Correct patching verified by disassembly of active kernel.
Juergen Gross (6):
x86: use macro instead of "0" for setting TICKET_SLOWPATH_FLAG
x86: move decision about clearing slowpath flag into arch_spin_lock()
x86: introduce new pvops function clear_slowpath
x86: introduce new pvops function spin_unlock
x86: switch config from UNINLINE_SPIN_UNLOCK to INLINE_SPIN_UNLOCK
x86: remove no longer needed paravirt_ticketlocks_enabled
arch/x86/Kconfig | 1 -
arch/x86/include/asm/paravirt.h | 13 +++++++++
arch/x86/include/asm...
2015 Apr 30
0
[PATCH 4/6] x86: introduce new pvops function spin_unlock
...++
7 files changed, 104 insertions(+), 14 deletions(-)
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 318f077..2f39129 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -730,6 +730,11 @@ static __always_inline void __ticket_clear_slowpath(arch_spinlock_t *lock,
PVOP_VCALL2(pv_lock_ops.clear_slowpath, lock, head);
}
+static __always_inline void __ticket_unlock(arch_spinlock_t *lock)
+{
+ PVOP_VCALL1_LOCK(pv_lock_ops.unlock, lock);
+}
+
void pv_lock_activate(void);
#endif
@@ -843,6 +848,7 @@ static inline notrace unsigned lon...
2015 Feb 12
8
[PATCH V3] x86 spinlock: Fix memory corruption on completing completions
...---------------
arch/x86/kernel/kvm.c | 4 +-
2 files changed, 45 insertions(+), 46 deletions(-)
potential TODO:
* The whole patch be splitted into, 1. move slowpath flag
2. fix memory corruption in completion problem ??
* May be we could directly pass inc for __ticket_check_and_clear_slowpath
but I hope current code is more readable.
Changes since V2:
- Move the slowpath flag to head, this enables xadd usage in unlock code
and inturn we can get rid of read/write after unlock (Oleg)
- usage of ticket_equals (Oleg)
Changes since V1:
- Add missing TICKET_LOCK_INC before unl...
2015 Feb 12
8
[PATCH V3] x86 spinlock: Fix memory corruption on completing completions
...---------------
arch/x86/kernel/kvm.c | 4 +-
2 files changed, 45 insertions(+), 46 deletions(-)
potential TODO:
* The whole patch be splitted into, 1. move slowpath flag
2. fix memory corruption in completion problem ??
* May be we could directly pass inc for __ticket_check_and_clear_slowpath
but I hope current code is more readable.
Changes since V2:
- Move the slowpath flag to head, this enables xadd usage in unlock code
and inturn we can get rid of read/write after unlock (Oleg)
- usage of ticket_equals (Oleg)
Changes since V1:
- Add missing TICKET_LOCK_INC before unl...
2015 Apr 30
0
[PATCH 2/6] x86: move decision about clearing slowpath flag into arch_spin_lock()
The decision whether the slowpath flag is to be cleared for
paravirtualized spinlocks is located in
__ticket_check_and_clear_slowpath() today.
Move that decision into arch_spin_lock() and add an unlikely attribute
to it to avoid calling a function in case the compiler chooses not to
inline __ticket_check_and_clear_slowpath() and the slowpath flag isn't
set.
Signed-off-by: Juergen Gross <jgross at suse.com>
---
arch/x...
2015 Jun 16
0
[PATCH 0/6] x86: reduce paravirtualized spinlock overhead
...>
> Correct patching verified by disassembly of active kernel.
>
> Juergen Gross (6):
> x86: use macro instead of "0" for setting TICKET_SLOWPATH_FLAG
> x86: move decision about clearing slowpath flag into arch_spin_lock()
> x86: introduce new pvops function clear_slowpath
> x86: introduce new pvops function spin_unlock
> x86: switch config from UNINLINE_SPIN_UNLOCK to INLINE_SPIN_UNLOCK
> x86: remove no longer needed paravirt_ticketlocks_enabled
>
> arch/x86/Kconfig | 1 -
> arch/x86/include/asm/paravirt.h |...
2015 Feb 12
0
[PATCH V3] x86 spinlock: Fix memory corruption on completing completions
Damn, sorry for noise, forgot to mention...
On 02/12, Raghavendra K T wrote:
>
> +static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
> + __ticket_t head)
> +{
> + if (head & TICKET_SLOWPATH_FLAG) {
> + arch_spinlock_t old, new;
> +
> + old.tickets.head = head;
> + new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
> + old.tickets.tail = new.tickets.head + TICKET_LOCK...
2015 Feb 12
0
[PATCH V3] x86 spinlock: Fix memory corruption on completing completions
Damn, sorry for noise, forgot to mention...
On 02/12, Raghavendra K T wrote:
>
> +static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
> + __ticket_t head)
> +{
> + if (head & TICKET_SLOWPATH_FLAG) {
> + arch_spinlock_t old, new;
> +
> + old.tickets.head = head;
> + new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
> + old.tickets.tail = new.tickets.head + TICKET_LOCK...
2015 Feb 15
0
[PATCH V5] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 15
0
[PATCH V5] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 15
7
[PATCH V5] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +61,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 15
7
[PATCH V5] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +61,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 13
3
[PATCH V4] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 13
3
[PATCH V4] x86 spinlock: Fix memory corruption on completing completions
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 24
2
[PATCH for stable] x86/spinlocks/paravirt: Fix memory corruption on unlock
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....
2015 Feb 24
2
[PATCH for stable] x86/spinlocks/paravirt: Fix memory corruption on unlock
...*/
@@ -60,10 +60,30 @@ static inline void __ticket_unlock_kick(arch_spinlock_t *lock,
}
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
+static inline int __tickets_equal(__ticket_t one, __ticket_t two)
+{
+ return !((one ^ two) & ~TICKET_SLOWPATH_FLAG);
+}
+
+static inline void __ticket_check_and_clear_slowpath(arch_spinlock_t *lock,
+ __ticket_t head)
+{
+ if (head & TICKET_SLOWPATH_FLAG) {
+ arch_spinlock_t old, new;
+
+ old.tickets.head = head;
+ new.tickets.head = head & ~TICKET_SLOWPATH_FLAG;
+ old.tickets.tail = new.tickets.head + TICKET_LOCK_INC;
+ new.tickets.tail = old.tickets....