All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t
@ 2021-08-24 11:08 Mike Galbraith
  2021-08-24 11:14 ` Vlastimil Babka
  0 siblings, 1 reply; 4+ messages in thread
From: Mike Galbraith @ 2021-08-24 11:08 UTC (permalink / raw)
  To: linux-rt-users; +Cc: Sebastian Andrzej Siewior, Thomas Gleixner


local_lock_t becoming a synonym of spinlock_t had consequences for the RT
mods to zsmalloc, which were taking a mutex while holding a local_lock,
inspiring a lockdep "BUG: Invalid wait context" gripe.

Converting zsmalloc_handle.lock to a spinlock_t restored lockdep silence.

Signed-off-by: Mike Galbraith <efault@gmx.de>
---
 mm/zsmalloc.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -82,7 +82,7 @@

 struct zsmalloc_handle {
 	unsigned long addr;
-	struct mutex lock;
+	spinlock_t lock;
 };

 #define ZS_HANDLE_ALLOC_SIZE (sizeof(struct zsmalloc_handle))
@@ -370,7 +370,7 @@ static unsigned long cache_alloc_handle(
 	if (p) {
 		struct zsmalloc_handle *zh = p;

-		mutex_init(&zh->lock);
+		spin_lock_init(&zh->lock);
 	}
 #endif
 	return (unsigned long)p;
@@ -927,7 +927,7 @@ static inline int testpin_tag(unsigned l
 #ifdef CONFIG_PREEMPT_RT
 	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);

-	return mutex_is_locked(&zh->lock);
+	return spin_is_locked(&zh->lock);
 #else
 	return bit_spin_is_locked(HANDLE_PIN_BIT, (unsigned long *)handle);
 #endif
@@ -938,7 +938,7 @@ static inline int trypin_tag(unsigned lo
 #ifdef CONFIG_PREEMPT_RT
 	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);

-	return mutex_trylock(&zh->lock);
+	return spin_trylock(&zh->lock);
 #else
 	return bit_spin_trylock(HANDLE_PIN_BIT, (unsigned long *)handle);
 #endif
@@ -949,7 +949,7 @@ static void pin_tag(unsigned long handle
 #ifdef CONFIG_PREEMPT_RT
 	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);

-	return mutex_lock(&zh->lock);
+	return spin_lock(&zh->lock);
 #else
 	bit_spin_lock(HANDLE_PIN_BIT, (unsigned long *)handle);
 #endif
@@ -960,7 +960,7 @@ static void unpin_tag(unsigned long hand
 #ifdef CONFIG_PREEMPT_RT
 	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);

-	return mutex_unlock(&zh->lock);
+	return spin_unlock(&zh->lock);
 #else
 	bit_spin_unlock(HANDLE_PIN_BIT, (unsigned long *)handle);
 #endif



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t
  2021-08-24 11:08 [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t Mike Galbraith
@ 2021-08-24 11:14 ` Vlastimil Babka
  2021-08-24 11:32   ` Mike Galbraith
  2021-08-26 14:57   ` Sebastian Andrzej Siewior
  0 siblings, 2 replies; 4+ messages in thread
From: Vlastimil Babka @ 2021-08-24 11:14 UTC (permalink / raw)
  To: Mike Galbraith, linux-rt-users; +Cc: Sebastian Andrzej Siewior, Thomas Gleixner

On 8/24/21 13:08, Mike Galbraith wrote:
> 
> local_lock_t becoming a synonym of spinlock_t had consequences for the RT
> mods to zsmalloc, which were taking a mutex while holding a local_lock,
> inspiring a lockdep "BUG: Invalid wait context" gripe.
> 
> Converting zsmalloc_handle.lock to a spinlock_t restored lockdep silence.
> 
> Signed-off-by: Mike Galbraith <efault@gmx.de>

BTW, does anyone really run zswap on a RT system?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t
  2021-08-24 11:14 ` Vlastimil Babka
@ 2021-08-24 11:32   ` Mike Galbraith
  2021-08-26 14:57   ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 4+ messages in thread
From: Mike Galbraith @ 2021-08-24 11:32 UTC (permalink / raw)
  To: Vlastimil Babka, linux-rt-users
  Cc: Sebastian Andrzej Siewior, Thomas Gleixner

On Tue, 2021-08-24 at 13:14 +0200, Vlastimil Babka wrote:
> On 8/24/21 13:08, Mike Galbraith wrote:
> >
> > local_lock_t becoming a synonym of spinlock_t had consequences for
> > the RT
> > mods to zsmalloc, which were taking a mutex while holding a
> > local_lock,
> > inspiring a lockdep "BUG: Invalid wait context" gripe.
> >
> > Converting zsmalloc_handle.lock to a spinlock_t restored lockdep
> > silence.
> >
> > Signed-off-by: Mike Galbraith <efault@gmx.de>
>
> BTW, does anyone really run zswap on a RT system?

(eek, oh hell no;) I only run ltp's zram tests to give box something
non-routine to do.

	-Mike


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t
  2021-08-24 11:14 ` Vlastimil Babka
  2021-08-24 11:32   ` Mike Galbraith
@ 2021-08-26 14:57   ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 4+ messages in thread
From: Sebastian Andrzej Siewior @ 2021-08-26 14:57 UTC (permalink / raw)
  To: Vlastimil Babka; +Cc: Mike Galbraith, linux-rt-users, Thomas Gleixner

On 2021-08-24 13:14:52 [+0200], Vlastimil Babka wrote:
> On 8/24/21 13:08, Mike Galbraith wrote:
> > 
> > local_lock_t becoming a synonym of spinlock_t had consequences for the RT
> > mods to zsmalloc, which were taking a mutex while holding a local_lock,
> > inspiring a lockdep "BUG: Invalid wait context" gripe.
> > 
> > Converting zsmalloc_handle.lock to a spinlock_t restored lockdep silence.
> > 
> > Signed-off-by: Mike Galbraith <efault@gmx.de>
> 
> BTW, does anyone really run zswap on a RT system?

The bit spinlock is problematic for RT and needs a replacement. Having a
page not available in RT is a no no. But then it might be a good
testcase if mlock() has been setup properly :) But other than that, I
can't imagine a real use case.

I'm going to apply that patch for the time being.

Sebastian

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-26 14:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-24 11:08 [patch] mm, zsmalloc: Convert zsmalloc_handle.lock to spinlock_t Mike Galbraith
2021-08-24 11:14 ` Vlastimil Babka
2021-08-24 11:32   ` Mike Galbraith
2021-08-26 14:57   ` Sebastian Andrzej Siewior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.